功能說明css
ps命令用於列出執行ps命令的那個時刻的進程快照,就像用手機給進程照了一張照片。若是想要動態地顯示進程,就須要使用top命令,該命令相似於把手機切換成錄像模式。html
選項說明linux
參數選項 | 解釋說明(帶@的爲重點) |
---|---|
-a | 顯示全部終端下執行的進程 |
a | 顯示與終端相關的全部進程,包含每一個進程的完整路徑@ |
x | 顯示與終端無關的全部進程@ |
u | 顯示進程的用戶信息@ |
-u | 顯示指定用戶相關的進程信息 |
-e | 顯示全部進程@ |
-f | 額外顯示UID,PPID,C與STIME欄位@ |
f | 顯示進程樹 |
-H | 顯示進程樹 |
-l | 以詳細的格式來顯示進程的情況 |
-o | 自定義輸出指定的字段,以逗號分隔 |
-sort key | key表示爲指定字段排序,默認升序,+key升序,-key降序 |
(1)ps 命令不接任何參數ios
[root@Mr_chen ~]# ps PID TTY TIME CMD 1135 pts/0 00:00:00 bash 1152 pts/0 00:00:00 bash 1162 pts/0 00:00:00 bash 1173 pts/0 00:00:00 bash 1182 pts/0 00:00:00 ps
默認狀況下,ps命令不接任何參數時,輸出的是使用者當前所在終端(窗口)的進程,其輸出結果中的各項說明以下。nginx
(2)ps -ef正則表達式
[root@Mr_chen ~]# ps -ef # -e顯示全部進程,-f格外顯示UID,PPID,C與STIME欄位 UID PID PPID C STIME TTY TIME CMD root 1 0 0 15:00 ? 00:00:00 /sbin/init root 2 0 0 15:00 ? 00:00:00 [kthreadd] root 3 2 0 15:00 ? 00:00:00 [migration/0] root 4 2 0 15:00 ? 00:00:00 [ksoftirqd/0] root 5 2 0 15:00 ? 00:00:00 [migration/0] root 6 2 0 15:00 ? 00:00:00 [watchdog/0] root 7 2 0 15:00 ? 00:00:00 [events/0] root 8 2 0 15:00 ? 00:00:00 [cgroup] root 9 2 0 15:00 ? 00:00:00 [khelper] root 10 2 0 15:00 ? 00:00:00 [netns] root 11 2 0 15:00 ? 00:00:00 [async/mgr] root 12 2 0 15:00 ? 00:00:00 [pm] root 13 2 0 15:00 ? 00:00:00 [sync_supers] root 14 2 0 15:00 ? 00:00:00 [bdi-default] root 15 2 0 15:00 ? 00:00:00 [kintegrityd/0] root 16 2 0 15:00 ? 00:00:00 [kblockd/0] root 17 2 0 15:00 ? 00:00:00 [kacpid]
輸出信息中各列說明以下docker
(3)ps aux編程
[root@Mr_chen ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19232 1488 ? Ss 15:00 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 15:00 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 15:00 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 15:00 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S 15:00 0:00 [migration/0] root 6 0.0 0.0 0 0 ? S 15:00 0:00 [watchdog/0] root 7 0.0 0.0 0 0 ? S 15:00 0:00 [events/0]
輸出信息中各列的說明以下ubuntu
(4)顯示指定用戶的相關進程信息swift
[root@Mr_chen ~]# ps -u yunjisuan PID TTY TIME CMD 1315 pts/1 00:00:00 bash 1335 pts/1 00:00:00 vim
(5) 以詳細格式顯示進程狀態
[root@Mr_chen ~]# ps -u yunjisuan -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 500 1315 1314 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash 0 T 500 1335 1315 0 80 0 - 35884 signal pts/1 00:00:00 vim
輸出信息中各列的說明以下
(6)查看某個進程在哪一個CPU上運行
[root@Mr_chen ~]# ps -eo pid,args,psr PID COMMAND PSR 1 /sbin/init 0 #CPU標記0表明第一個CPU 2 [kthreadd] 0 3 [migration/0] 0 4 [ksoftirqd/0] 0 5 [migration/0] 0 6 [watchdog/0] 0 7 [events/0] 0 8 [cgroup] 0 9 [khelper] 0
功能說明
kill命令可以終止你但願中止的進程
選項說明
參數選項 | 解釋說明(帶@爲重點) |
---|---|
-l | 列出所有的信號名稱 |
-p | 指定kill命令只打印相關進程的進程號,而不發送任何信號 |
-s | 指定要發送的信號@ |
(1)列出全部信號的名稱
[root@Mr_chen ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@Mr_chen ~]# kill -l kill #可使用-l參數對信號名和數字信號互換 9 [root@Mr_chen ~]# kill -l 9 KILL
經常使用信號:
信號 | 說明 |
---|---|
HUP(1) | 掛起,一般因終端掉線或用戶退出而引起 |
INT(2) | 中斷,一般是按下Ctrl+c組合鍵來發出這個信號 |
QUIT(3) | 退出,一般是按下CTRL+\組合鍵來發出這個信號 |
KILL(9) | 當即結束進程的運行 |
TERM(15) | 終止,一般在系統關機時發送 |
TSTP(20) | 暫停進程的運行,一般是按下Ctrl+z組合鍵來發出這個信號 |
(2)終止進程
- kill指令默認使用的信號爲15,用於結束進程。若是進程忽略此信號,則可使用信號9強制終止進程。
- 通常是先經過ps等命令獲取到要終止進程的進程號,而後直接使用「kill 進程號」就能夠了。
kill 2203 #kill 命令默認使用的信號爲15,這種格式最經常使用、 kill -s 15 2203 #這種格式使用-s參數明確指定發送值爲15的信號,效果和kill 2203同樣 kill -15 2203 #上面的-s 15能夠簡寫爲-15
若是用上面的方法仍是沒法終止進程,那麼咱們就能夠用KILL(9)信號強制終止進程。
kill -9 2203 #信號9會強行終止進程,這會帶來一些反作用,如數據丟失,或者終端沒法恢復到正常狀態等,所以應儘可能避免使用,除非進程使用其餘信號沒法終止。
(3)擴展:特殊信號0的應用案例
在kill的全部信號中,有一個十分特殊的信號值0,使用格式爲kill -0 $pid。其中的-0表示不發送任何信號給$pid對應的進程,可是仍然會對$pid是否存在對應的進程進行檢查,若是$pid對應的進程已存在,則返回0,若不存在則返回1。
[root@Mr_chen ~]# pgrep -l sshd 985 sshd 1131 sshd [root@Mr_chen ~]# kill -s 0 985 [root@Mr_chen ~]# echo $? 0 [root@Mr_chen ~]# kill -s 0 986 bash: kill: (986) - No such process [root@Mr_chen ~]# echo $? 1
應用:若是同窗們想要寫一個管理系統服務的腳本,則可使用這個技巧。
功能說明:
使用kill命令終止進程還須要先獲取進程的pid進程號,這個過程有點繁瑣,而使用killall命令就能夠直接用「kill 進程名」這種形式終止進程。
選項說明:
參數選項 | 解釋說明(帶@爲重點) |
---|---|
-I | 不區分大小寫匹配 |
-g | 終止屬於該進程組的進程 |
-i | 在終止進程以前詢問是否確認 |
-l | 列出全部已知的信號名 |
-q | 若是沒有進程終止則不提示 |
-r | 使用正則表達式匹配要終止的進程名稱 |
-s | 用指定的信號代替默認信號 |
-u | 終止指定用戶的進程@ |
-v | 報告信號是否發送成功 |
-w | 等待全部被終止的進程死去。killall每秒都會檢查一次被終止的進程是否仍然存在,其僅在都死光後才返回。注意,若是信號被忽略,或者沒有起做用,或者進程停留在殭屍狀態,那麼killall可能會永久等待@ |
(1)終止定時任務服務進程的例子
首先咱們要知道定時任務的進程名是crond,終止該進程的命令以下:
[root@Mr_chen ~]# killall crond [root@Mr_chen ~]# killall crond #用killall終止進程可執行屢次 crond: no process killed #等看到這個結果說明進程死了 [root@Mr_chen ~]# [root@Mr_chen ~]# /etc/init.d/crond start #啓動服務 Starting crond: [ OK ] [root@Mr_chen ~]# killall -w crond #使用-w參數,會看到等待幾秒後結束命令操做 [root@Mr_chen ~]# killall -w crond crond: no process killed
(2)終止指定用戶的全部進程
[root@Mr_chen ~]# ps -u yunjisuan -l #查看普通用戶的全部進程詳細信息 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash 0 T 500 1235 1210 0 80 0 - 35884 signal pts/1 00:00:00 vim [root@Mr_chen ~]# killall -u yunjisuan vim #殺掉指定用戶的vim進程 [root@Mr_chen ~]# ps -u yunjisuan -l #成功 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
特別提示:
這種方式能夠終止全部歸屬於yunjisuan用戶的vim進程。在以前,我在給同窗們講nginx優化時提到過nginx的監牢模式和在和給同窗們講解sudo時提到過企業的集權分治策略,他們都是利用普通用戶來啓動服務。此時,咱們能夠指定用戶殺死該用戶啓動的某一服務的全部進程。
功能說明:
pkill命令可經過進程名終止指定的進程。使用killall終止進程須要連續執行幾回,而pkill能夠殺死指定進程及其全部子進程。
選項說明:
參數選項 | 解釋說明(帶@爲重點) |
---|---|
-t終端 | 殺死指定終端的進程@ |
-u用戶 | 殺死指定用戶的進程@ |
(1)經過進程名終止進程
[root@Mr_chen ~]# /etc/init.d/crond status #查看定時任務程序運行狀態 crond (pid 1274) is running... [root@Mr_chen ~]# pkill crond #終止定時任務進程 [root@Mr_chen ~]# /etc/init.d/crond status crond dead but subsys locked #進程被終止
(2)經過終端名終止進程
[root@Mr_chen ~]# w #第二列TTY就是用戶運行的終端 15:57:09 up 1:05, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT yunjisua tty1 - 15:55 12.00s 0.02s 0.01s vim ttt root pts/0 192.168.200.1 14:51 0.00s 0.07s 0.00s w root pts/1 192.168.200.1 15:19 3:28 0.01s 0.00s bash [root@Mr_chen ~]# ps -u yunjisuan -l #查看用戶的進程 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash 4 S 500 1333 1322 0 80 0 - 27075 wait tty1 00:00:00 bash 0 S 500 1359 1333 0 80 0 - 35890 poll_s tty1 00:00:00 vim [root@Mr_chen ~]# pkill -t tty1 #殺掉終端正在運行的進程 [root@Mr_chen ~]# ps -u yunjisuan -l #vim進程沒了 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash 4 S 500 1333 1322 0 80 0 - 27075 n_tty_ tty1 00:00:00 bash [root@Mr_chen ~]# pkill -9 -t tty1 #強行殺掉tty1終端(踢掉用戶) [root@Mr_chen ~]# ps -u yunjisuan -l F S UID PID PPID C PRI