Linux基礎_進程和計劃任務

工作排程

命令:at

  • 工作排程
    at [OPTION] TIME
[OPTION] 註釋
-m 完成後發郵件
-l 顯示所有at排程(相當於atq)
-d 刪除at排程(相當於atrm)
-b 相當於batch(會在系統負載0.8以下的時候執行)
-c NUM 顯示第NUM項內容
  • /etc/at.allow與/etc/at.deny
    + 當只有at.allow時,默認禁止其它用戶
    + 當只有at.deny果,默認允許其它用戶
  • at隊列存放在/var/spool/at目錄中
# 相關服務開啓:atd
[root@localhost ~]$systemctl start atd
[root@localhost ~]$systemctl enable atd
[root@localhost ~]$systemctl status atd


[root@localhost ~]$at now + 1 min
at> /bin/mail -s "testing at job " root < /root/.bashrc
at> <EOT>
job 1 at Tue Jun  4 20:14:00 2019

命令:crontab

  • crontab排程
    crontab [-u username] [-elr]
[OPTION] 註釋
-u usename 指定用戶
-e 編輯crontab
-l 查看crontab
-r 刪除所有crontab
-i 刪除提醒
  • /etc/crontab.allow與/etc/crontab.deny(默認只有crontab.deny)
    + 當只有crontab.allow時,默認禁止其它用戶
    + 當只有crontab.deny果,默認允許其它用戶
  • 配置文件:
    全局:/etc/crontab
    程序:/etc/cron.d/*
    個人:/var/spool/cron/USERNAME
    每小時執行:/etc/cron.hourly/
    每天執行:/etc/cron.daily/
    每週執行:/etc/cron.weekly/
    每月執行:/etc/cron.monthly/
  • 相關日誌:/var/log/cron
[特殊字符] 註釋
* 任何
分段,如1,3表示1和3
- 範圍,如1-3表示1,2,3
*/n 每隔n個單位
[root@localhost ~]$crontab -e
====vi編輯器====
  0 12 *  *  *   mail -s "at 12:00" chen < file
#分 時 日 月 周 |<===========COMMAND==========>|

#每5分鐘
*/5 *  *  *  *   mail -s "at 12:00" chen < file
#每週1,3,5
* *  *  *  1,3,5   mail -s "at 12:00" chen < file

+如何在秒級別運行任務?

* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done

anacron系統

  • 執行crontab未執行的工作
    anacron [OPTION] [job]
[OPTION] 註釋
-s 根據時間記錄文件判斷是否進行
-f 強制進行
-n 立刻進行
-u 僅更新時間記錄文件
job 由/etc/anacrontab定義的各項工作
  • 時間記錄文件:/etc/spool/anacron/cron*
  • 配置文件:/etc/anacrontab,負責執行/etc/cron.daily/etc/cron.weekly/etc/cron.monthly中系統任務
    字段1:如果在這些日子裏沒有運行這些任務……
    字段2:在重新引導後等待這麼多分鐘後運行它
    字段3:任務識別器,在日誌文件中標識
    字段4:要執行的任務

管理臨時文件

CentOS7使用systemd-tmpfiles-setup服務實現
CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時文件

  • 配置文件:
    /etc/tmpfiles.d/.conf
    /run/tmpfiles.d/
    .conf
    /usr/lib/tmpfiles/*.conf
    /usr/lib/tmpfiles.d/tmp.conf
    d /tmp 1777 root root 10d
    d /var/tmp 1777 root root 30d
  • 命令:
    systemd-tmpfiles –clean|remove|create configfile

程序與進程:

  1. 程序Program,通常爲二進制程序(Binary program)

  2. 進程process:一個運行中的程序
    + PID:標記各個進程
    + UID/GID/SELINUX:決定對文件系統的權限
    + task struct:Linux內核存儲進程的信息的數據結構
    + task list:多個任務的task struct組成的鏈表

  3. 守護進程:隨計算機啓動或關閉1

  4. 進程、線程、協程
    在這裏插入圖片描述

  5. MMU:Memory Management Unit負責轉換線性和物理地址
    TLB:Translation Lookaside Buffer 翻譯後備緩衝器,用於保存虛擬地址和物理地址映射關係的緩存
    LRU:Least Recently Used 近期最少使用算法,釋放內存

  6. OOM:out of memory內存泄露

  7. 進程的基本狀態和轉換
    在這裏插入圖片描述

  8. 狀態之間轉換六種情況
    運行——>就緒: 1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲就緒狀態
    就緒——>運行: 運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
    運行——>阻塞: 正在執行的進程因發生某等待事件而無法執行,則進程由執行狀態變爲阻塞狀態,如發生了I/O請求
    阻塞——>就緒: 進程所等待的事件已經發生,就進入就緒隊列
    以下兩種狀態是不可能發生的:
    阻塞——>運行: 即使給阻塞進程分配CPU,也無法執行,操作系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
    就緒——>阻塞: 就緒態根本就沒有執行,談不上進入阻塞態

  9. 進程優先級
    在這裏插入圖片描述

  • 系統優先級:數字越小,優先級越高
  • 0-139:各有140個運行隊列和過期隊列
  • 實時優先級: 99-0 值最大優先級最高
  • nice值:-20到19,對應系統優先級100-139

&——後臺執行

#後臺執行
cp file1 file2 & 

#也可以Ctrl+z掛起程序到後臺(暫停狀態)

命令:fg

把背景的工作拿到前景來執行

#取出“+”的工作
[root@localhost ~]$fg

#取出編號爲1的工作
[root@localhost ~]$fg %1

命令:bg

將背景的工作變成運行

[root@localhost ~]$jobs ; bg %2 ; jobs
[1]-  Stopped                 vim f1
[2]+  Stopped                 find / -perm 744 &>/dev/null
[2]+ find / -perm 744 &>/dev/null &
[1]+  Stopped                 vim f1
[2]-  Running                 find / -perm 744 &>/dev/null &

命令:dmesg

顯示系統核心信息

命令:fuser

查看使用該文件的進程
fuser [OPTION] -SIGNAL FILE/DIR

[OPTION] 註釋
-u 顯示所有者
-m 顯示文件系統最頂層
-v 列出每個文件與進程還有指令的完整相關性
-k kill使用該文件的進程
-i 刪除前詢問
[root@localhost ~]$fuser -vu .
                     USER        PID ACCESS COMMAND
/root:               root       7299 ..c.. (root)bash
                     root      79673 ..c.. (root)sftp-server
                     root      79680 ..c.. (root)bash
                     root      79682 ..c.. (root)bash
                     root      129675 ..c.. (root)sftp-server
#ACCESS
#      f:是一個被開啓的文件
#      F:被開啓但在等待迴應
#      r:頂層目錄
#      c:進程在當前目錄下
#      e:可被觸發執行
#      m:分享的動態函式庫

命令:jobs

查看背景工作狀態

[OPTION] 註釋
-l 顯示PID
-r 顯示running的工作
-s 顯示stop的工作
[root@localhost ~]$jobs
[1]+  Stopped                 vim f1

[root@localhost ~]$jobs -l
[1]+ 82052 Stopped                 vim f1

## 命令:kill
`kill -SIGNAL %NUM2` NUM2是指工作的編號
`kill -SIGNAL PID` 給指定PID信號
[-SIGNAL] | 註釋
-|-
-1 | SIGHUP重新讀取一次參數的配置文件
-2 | SIGINT表示Ctrl+c
-9 | SIGKILL強制刪除一個工作
-15 | SIGTERM正常方式刪除一個工作
-19 | SIGSTOP暫停一個進程
```bash
[root@localhost ~]$kill -9 %2

命令:nice

  • 以多少優先級運行程序(運行前設置)
    nice -n NUM COMMAND
    NUM:-2019(相當於100139)
#優先級爲125
[root@localhost ~]$nice -n 5 bash

命令:nohup

生成獨立的進程,不在本bash中運行

#在前景中工作
nohup COMMAND
#在背景中工作
nohup COMMAND &

命令:pgrep

  • ps命令的grep
    pgrep -lt pts/1
[OPTION] 意義
-u uid 生效者
-U uid 命令發起者
-t terminal 相當終端的進程
-l 顯示進程名
-a 顯示完整格式的進程名
-P pid 顯示指定進程的子進程
[root.CentOS 7] ➤ pgrep -au root

命令:pidof

顯示進程的PID
pidof [OPTION] PROGRAM_NAME

[OPTION] 註釋
-s 僅顯示一個PID
-x 同時列出進程可能的PPID

命令:ps

查看進程

[OPTION] 註釋
-A 或 -e 所有的process
-a 不與terminal 有關的process
-u 有效使用者的process
-x 列出完整信息
-l 較詳細的PID信息
-j 工作的格式
-f 顯示更多信息
-o 定製顯示信息(pid、ppid、fgroup、ni、lstart、etime、cmd、%cpu、%mem)
-u 顯示有效用戶
-U 顯示實際用戶
-g gid或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid或組名稱
-C cmdlist 指定命令,多個命令用,分隔
-L 顯示線程
-F 顯示更完整格式的進程信息
-H 以進程層級格式顯示進程相關信息
-p pid 顯示指pid的進程
--ppid pid 顯示屬於pid的子進程
-M 顯示SELinux信息,相當於Z
[root@localhost ~]$ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  51651  51631  0  80   0 - 28860 do_wai pts/1    00:00:00 bash
0 R     0 106202  51651  0  80   0 - 38309 -      pts/1    00:00:00 ps

#F:process fags
    #4爲root
#S:stat
    # R :running
    # S :sleep
    # D :不可被喚醒睡眠狀態
    # T :stop
    # Z :殭屍狀態。(進程被終止但無法被移除到內存外)
    # + :前臺進程
    # l: 多線程進程
    # L:內存分頁並帶鎖
    # N:低優先級進程
    # <: 高優先級進程
    # s: session leader,會話(子進程)發起者
#UID/PID/PPID:所有者、進程PID、父進程PID
#C:CPU利用率
#PRI/NI:prority/nice優先級 PRI=PRI+NI
#ADDR/SZ/WCHAN:ADDR指出在內存的哪個部分;SZ佔用內存;WCHAN是否運作中
#TTY:終端機位置
#TIME:使用的CPU的時間
#CMD:指哪一個command

[root@localhost ~]$ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6 128100  6712 ?        Ss   Jun02   0:22 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    Jun02   0:00[kthreadd]
root          3  0.0  0.0      0     0 ?        S    Jun02   0:02 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   Jun02   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    Jun02   0:02 [kworker/u256:0]
...中間省略...

#-o定製顯示信息,k排序,-%mem是倒序
[root.CentOS 7]ps o pid,%cpu,%mem k %mem
   PID %CPU %MEM
 13840  0.0  0.1
  7089  0.0  0.3
 12985  0.0  0.3

命令:pstree

顯示進程樹

[OPTION] 註釋
-p 顯示PID
-u 顯示所屬帳號

命令:renice

  • 重新指定優先級(運行中的)
    renice NUM PID
[root@localhost ~]$renice -5 14824

命令:top

動態觀察進程的變化

[OPTION] 註釋
-d # 刷新秒數
-b 顯示所有進程
-n # 刷新幾次
-p 指定PID
-H 線程模式
[top中的命令] 註釋
? 顯示在top中可以輸入的命令
P CPU使用率排序
M 內存使用率排序
N PID排序
T CPU時間累積time+排序
k 給某個PID一個15 signal(關閉進程)
r 給某PID一個nice值
1 顯示CPU利用率
l 顯示/關閉uptime
q 退出
[root@localhost ~]$top
top - 21:41:48 up 1 day,  5:18,  2 users,  load average: 0.00, 0.01, 0.05
       #開機時間    #運行時間       #用戶數        系統負載  1min,5min,15min
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
       #進程總數     
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
       #CPU負載
KiB Mem :   995896 total,   340164 free,   150336 used,   505396 buff/cache
       #物理內存的使用情況
KiB Swap:  2097148 total,  2097148 free,        0 used.   602152 avail Mem
       #虛擬內存的使用情況
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  #PID  用戶     優先級          
     1 root      20   0  128100   6712   4176 S  0.0  0.7   0:22.83 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kthreadd
     3 root      20   0       0      0      0 S  0.0  0.0   0:02.36 ksoftirqd/0
     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S  0.0  0.0   0:03.01 kworker/u256:0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S  0.0  0.0   0:21.82 rcu_sched
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain
    11 root      rt   0       0      0      0 S  0.0  0.0   0:00.78 watchdog/0
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.03 khungtaskd
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
    17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
    18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset

命令:uname

顯示系統內核信息

[OPTION] 註釋
-a 所有信息
-s 系統核心名
-r 系統核心版本
-m 系統硬件名
-p CPU類型
-i 硬件平臺
[root@localhost ~]$uname -r
3.10.0-957.el7.x86_64

命令:uptime

  • 顯示系統開機時長
[root@localhost ~]$uptime
 10:38:20 up 1 day,  7:12,  2 users,  load average: 0.03, 0.02, 0.05
  • 配置文件顯示系統開機時長
    cat /proc/uptime
    1234 1230
    系統啓動時長,空閒進程的總時長(按總的CPU核數計算)

內存工具:

命令:free

  • 顯示內存信息
    free -h
[OPTION] 意義
-b 以字節爲單位
-m 以MB爲單位
-g 以GB爲單位
-h 易讀格式
-o 不顯示-/+buffers/cache行
-t 顯示RAM + swap的總和
-s # 刷新間隔爲n秒
-c # 刷新n次後即退出
[root@localhost ~]$free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        147M        332M        7.7M        492M        588M
Swap:          2.0G          0B        2.0G

命令:vmstat

  • 顯示動態的系統資源
    vmstat [options] [delay [count]]
[OPTION] 註釋
-a 顯示活躍與否的進程
-f 從boot開始到現在的fork的進程數
-s 開機到目前,導致內存變化的說明
-S UNIT 後面接單位K、M

-d| 列出磁盤的讀寫量
-p| 顯示分區的讀寫量
NUM | NUM秒刷新一次

[root@localhost ~]$vmstat 1 4
#1秒刷新,顯示4次
[root@localhost ~]$vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 340812  14216 490048    0    0     3     2   64   93  0  1 99  0  0
#procs
       #r:運行中
       #b:不可喚醒的進程數
#memory
       #swpd:虛擬內存使用量
       #free:未使用的內存量
       #buff:緩衝存儲器
       #cache:高速緩存
#swap
       #si:從磁盤取出的進程量
       #so:寫入磁盤的swap量 
#io
       #bi:從磁盤讀入的區塊數
       #bo:寫到磁盤的區塊數
#system
       #in:每秒中斷的進程數
       #cs:非核心的CPU使用狀態
#cpu 
       #us:每秒事件切換數
       #sy:核心使用的CPU
       #id:閒置的狀態
       #wa:等待I/O消耗的CPU
       #st:虛擬機使用的CPU

系統監控工具:

命令:iostat

  • 統計CPU和設備IO信息
    iostat 1 10
[root.CentOS 7] ➤ iostat 1 10
#1秒刷新,顯示10次

命令:iftop

  • 顯示帶寬使用情況,(EPEL源安裝:iftop)
[root.CentOS 7] ➤ iftop -n -i eth0

命令:pmap

  • 進程對應的內存映射
    pmap [options] pid [...]
[OPTION] 意義
-x 顯示詳細格式的信息

也可以查看:cat /proc/PID/maps

命令:glances

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

常用選項 意義
-b 以Byte爲單位顯示網卡數據速率
-d 關閉磁盤I/O模塊
-f /path/to/somefile 設定輸入文件位置
-o {HTML CSV}
-m 禁用mount模塊
-n 禁用網絡模塊
-t # 延遲時間間隔
-1 每個CPU的相關數據單獨顯示
-B IP 指明監聽的本機哪個地址(server)
-c IP 要連入的服務器端地址(client)
內建命令 意義
a 自動排序進程
c 按CPU對進程排序
m 按內存對進程排序
p 名字對進程排序
i 按I/O速率對進程排序
d 顯示/隱藏磁盤I/0狀態
f 顯示/隱藏文件系統狀態
n 顯示/隱藏網絡狀態
s 顯示/隱藏傳感器狀態
y 顯示/隱藏hddtemp狀態
l 顯示/隱藏日誌
b 網絡I/O的字節或位
w 刪除警告日誌
x 刪除警告和關鍵日誌
1 全局CPU或每CPU統計
h 顯示/隱藏幫助
t 將網絡I/O視爲組合
u 查看累計網絡I/O
q 退出 (Esc 或 Ctrl-C )
  • 服務器模式:
    glances -s -B IPADDR
    IPADDR: 指明監聽的本機哪個地址

  • 客戶端模式:
    glances -c IPADDR
    IPADDR:要連入的服務器端地址

命令:dstat

  • 系統資源統計,代替vmstat,iostat
    dstat [-afv] [options..] [delay [count]]
[OPTION] 意義
-c 顯示cpu相關信息
-C #,#,…,total
-d 顯示disk相關信息
-D total,sda,sdb,…
-g 顯示page相關統計數據
-m 顯示memory相關統計數據
-n 顯示network相關統計數據
-p 顯示process相關統計數據
-r 顯示io請求相關的統計數據
-s 顯示swapped相關的統計數據
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu 顯示最佔用CPU的進程
--top-io 顯示最佔用io的進程
--top-mem 顯示最佔用內存的進程
--top-latency 顯示延遲最大的進程

命令:iotop

  • 監視磁盤I/O使用狀況的top類工具
    iotop [OPTIONS]
[OPTION] 意義
-o 只顯示正在產生I/O的進程或線程,除了傳參,可以在運行過程中按o生效
-b 非交互模式,一般用來記錄日誌
-n NUM 設置監測的次數,默認無限。在非交互模式下很有用
-d SEC 設置每次監測的間隔,默認1秒,接受非整形數據例如1.1
-p PID 指定監測的進程/線程
-u USER 指定監測某個用戶產生的I/O
-P 僅顯示進程,默認iotop顯示所有線程
-a 顯示累積的I/O,而不是帶寬
-k 使用kB單位,而不是對人友好的單位。在非交互模式下,腳本編程有用
-t 加上時間戳,非交互非模式
-q 禁止頭幾行,非交互模式,有三種指定方式(只在第一次監測時顯示列名)
-qq 永遠不顯示列名
-qqq 永遠不顯示I/O彙總
交互按鍵 意義
left和right方向鍵 改變排序
r 反向排序
o 切換至選項–only
p 切換至–processes選項
a 切換至–accumulated選項
q 退出
i 改變線程的優先級

命令:nload

  • 查看網絡實時吞吐量(yum -y install nload)
[OPTION] 意義
-a 列出打開文件存在的進程
-c<進程名> 列出指定進程所打開的文件
-g 列出GID號進程詳情
-d<文件號> 列出佔用該文件號的進程
+d<目錄> 列出目錄下被打開的文件
+D<目錄> 遞歸列出目錄下被打開的文件
-t TIME 設置刷新間隔;TIME是毫秒

設置單位:-u [UNIT]

[UNIT] 意義
h auto
b Bit/s
k kBit/s
m MBit/s
H auto
B Byte/s
K kByte/s
M MByte/s
[root.CentOS 7] ➤ nload -u M eth0

命令:lsof

  • 顯示進程開啓的文件
    lsof [OPTION] [+d]
[OPTION] 註釋
-a AND多項同時成立才顯示結果
-U 僅列出Unix like系統的socket文件類型
-u username 與指定的user相關的文件
-i :PORT 查看指定端口
+d 指定目錄
-n <目錄> 列出使用NFS的文件
-i <條件> 列出符合條件的進程(4、6、協議、:端口、 @ip )
-p <進程號> 列出指定進程號所打開的文件
-u 列出UID號進程詳情
-h 顯示幫助信息
-v 顯示版本信息。
-n 不反向解析網絡名字
#顯示root的bash所開始的文件
[root@localhost ~]$lsof -u root | grep bash
bash        7299 root  cwd       DIR              253,0       240   33574977 /root
bash        7299 root  rtd       DIR              253,0       247         64 /
bash        7299 root  txt       REG              253,0    964608   50337495 /usr/bin/bas
bash        7299 root  mem       REG              253,0 106075056     285748 /usr/lib/locale/locale-archive
bash        7299 root  mem       REG              253,0     61624     279580 /usr/lib64/libnss_files-2.17.so
...

#查看由登陸用戶啓動而非系統啓動的進程
lsof /dev/pts/1

#指定進程號,可以查看該進程打開的文件
lsof -p 9527

#查看指定程序打開的文件
lsof -c httpd

#查看指定用戶打開的文件
lsof -u root | more

#查看指定目錄下被打開的文件
lsof +D /var/log/
lsof +d /var/log/
#參數+D爲遞歸列出目錄下被打開的文件,參數+d爲列出目錄下被打開的文件

#查看所有網絡連接
lsof -i –n
lsof [email protected]
#通過參數-i查看網絡連接的情況,包括連接的ip、端口等以及一些服務的連接情況,例如:sshd等。也可以通過指定ip查看該ip的網絡連接情況

#查看端口連接情況
lsof -i :80 -n
#通過參數-i:端口可以查看端口的佔用情況,-i參數還有查看協議,ip的連接情況等

#查看指定進程打開的網絡連接
lsof -i –n -a -p 9527
#參數-i、-a、-p等,-i查看網絡連接情況,-a查看存在的進程,-p指定進程

#查看指定狀態的網絡連接
lsof -n -P -i TCP -s TCP:ESTABLISHED
#-n:no host names, -P:no port names,-i TCP指定協議,-s指定協議狀態通過多個參數可以清晰的查看網絡連接情況、協議連接情況等
  • lsof示例——恢復刪除文件
lsof |grep /var/log/messages
rm -f /var/log/messages
lsof |grep /var/log/messages
cat /proc/653/fd/6
cat /proc/653/fd/6 > /var/log/messages

命令:killall

killall [-iIe] -SIGNAL COMMAND_NAME 給指定進程名信號

[OPTION] 註釋
-i interactivve交互式的
-e exact指定完整的進程名
-I 忽略大小寫
#詢問是否終止進程
[root@localhost ~]$killal -i -9 bash

命令:kill

  • 向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫
    kill [OPTION]
[OPTION] 意義
-u uid effective user,生效者
-U uid real user,真正發起運行命令者
-t terminal 與指定終端相關的進程
-l 顯示進程名(pgrep可用)
-a 顯示完整格式的進程名(pgrep可用)
-P pid 顯示指定進程的子進程
  • 常用信號:man 7 signal(kill –l)
  1. SIGHUP 無須關閉進程而讓其重讀配置文件
  2. SIGINT 中止正在運行的進程;相當於Ctrl+c
  3. SIGQUIT 相當於ctrl+\
  4. SIGKILL 強制殺死正在運行的進程
  5. SIGTERM 終止正在運行的進程
  6. SIGCONT 繼續運行
  7. SIGSTOP 後臺休眠
  • 指定信號的方法 :
    (1) 信號的數字標識:1, 2, 9等
    (2) 信號完整名稱:SIGHUP
    (3) 信號的簡寫名稱:HUP
  • 使用方法
    按PID:kill –s SIGNAL pid
    按名稱:killall [-SIGNAL] comm…
    按模式:pkill [options] pattern

練習

1、每週的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式爲“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的時間
2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
3、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高於80%,就執行wall警報

練習答案

1、每週的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式爲“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的時間

> crontab -e
30 1 * * 1-5 tar -Jcf /backup/etcbak-`date -d yesterday +%F-%H`.tar.xz /etc/ &

2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中

> crontab -e
0 */2 * * * /bin/grep '^[SM]' /proc/meminfo >> /tmp/meminfo.txt

3、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高於80%,就執行wall警報

> crontab -e
*/10 * * * 1-5 /bin/bash /data/diskcheck.sh
> cat /data/diskcheck.sh
#!/bin/bash
duser=$(df | sed -nr '/^\/dev\/sd/s/(^.*\ )([0-9]+)(%.*$)/\2/p')
[ duser -gt 80 ] && wall "disk over 80%"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章