【Linux經常使用命令】Linux kill, killall, kill -9,

參考連接 https://blog.csdn.net/zong596568821xp/article/details/77899454linux

kill + PIDubuntu

kill -9 + PID  加上-9 是強制終止的信號安全

killall 是直接加進程名(可是進程名必定要完整) 就能殺掉這些進程socket

 

1) 查看進程的方法: ui

ps -ef  或者 ps auxspa

root     15087  0.0  0.0      0     0 ?        S    23:31   0:00 [kworker/1:1]
root     15219  0.0  0.0      0     0 ?        S    23:36   0:00 [kworker/1:0]
root     15460  0.0  0.0      0     0 ?        S    23:41   0:00 [kworker/1:2]
homer    15572 23.0  5.8 791472 119788 ?       Sl   23:45   0:03 /usr/lib/firefox/firefox
homer    15590  0.1  0.1 273796  3132 ?        Sl   23:45   0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
homer    15620  0.0  0.0  22360  1268 pts/0    R+   23:45   0:00 ps aux操作系統

2) kill -9.net

kill  -s  9  15572firefox

 

其中,-s 9 制定了傳遞給進程的信號是9,即強制、儘快終止進程。 15572則是上面ps查到的火狐(firefox)的PID。翻譯

簡單吧,但有個問題,進程少時ps還無所謂,進程多了,就會以爲痛苦了,不管是ps -ef 仍是ps -aux,每次都要在一大串進程信息裏面查找到要殺的進程PID,看的眼都花了。

用法詳解:

kill -9, 這個強大和危險的命令迫使進程在運行時忽然終止,進程在結束後不能自我清理。危害是致使系統資源沒法正常釋放,通常不推薦使用,除非其餘辦法都無效。 
當使用此命令時,必定要經過ps -ef確認沒有剩下任何殭屍進程。只能經過終止父進程來消除殭屍進程。若是殭屍進程被init收養,問題就比較嚴重了。殺死init進程意味着關閉系統。 
若是系統中有殭屍進程,而且其父進程是init,並且殭屍進程佔用了大量的系統資源,那麼就須要在某個時候重啓機器以清除進程表了。 

 

2.1) 改進 1 —— grep

把ps的查詢結果經過管道傳給grep,查找包含特定字符串的進程。管道符「|」用來隔開兩個命令,管道符左邊命令的輸出會做爲管道符右邊命令的輸入。

例如: homer@ubuntu:~$ ps -aux | grep firefox

homer    15572  1.7  5.0 808644 103260 ?       Sl   23:45   0:07 /usr/lib/firefox/firefox
homer    15735  0.0  0.0  13584   920 pts/0    S+   23:52   0:00 grep --color=auto firefox

直接找到firefox進程PID, 輸入: kill  -s  9  15572

 

2.2) 改進 2 —— pgrep

pgrep的p代表了這個命令是專門用於進程查詢的grep

例如: homer@ubuntu:~$ pgrep firefox
15572

 

2.3) 改進 3 —— pidof

pidof命令,表示 pid of xx,字面翻譯過來就是 xx的PID

例如: homer@ubuntu:~$ pidof firefox
15572

 

2.4) 改進4 —— grep + awk

grep firefox 列出firefox進程信息,並awk取第二個field,即PID

例如: homer@ubuntu:~$ ps -ef | grep firefox | grep -v grep | awk '{print $2}' 
15572

 

2.5) 改進 5 —— kill + xargs

殺死進程的方式有如下幾種:

a) ps -ef | grep firefox | grep -v grep | awk '{print $2}' | xargs kill -s 9

b) pgrep firefox | xargs kill -s 9

c) pidof firefox | xargs kill -s 9

d) kill -s 9 `ps -ef | grep firefox | grep -v grep | awk '{print $2}'`

e) kill -s 9 `pgrep firefox`

f) kill -s 9 `pidof firefox`

 

 

 

2.6) 改進 6 —— pkill

pkill 相似於 pgrep, pkill 表示 pgrep+kill

例如: pkill firefox

 

3) killall

killall命令, 殺死同一進程組內的全部進程,其容許指定要終止的進程的名稱,而非PID

killall和pkill是類似的,不過若是給出的進程名不完整,killall會報錯。pkill或者pgrep只要給出進程名的一部分就能夠終止進程。

homer@ubuntu:~$ killall firefo
firefo: no process found
homer@ubuntu:~$ killall firefox
homer@ubuntu:~$ killall -9 firefox

 

killall[參數][進程名]

上面的命令用來結束同名的的全部進程,下面是命令參數

-Z 只殺死擁有scontext 的進程
 
-e 要求匹配進程名稱
 
-I 忽略小寫
 
-g 殺死進程組而不是進程
 
-i 交互模式,殺死進程前先詢問用戶
 
-l 列出全部的已知信號名稱
 
-q 不輸出警告信息
 
-s 發送指定的信號
 
-v 報告信號是否成功發送
 
-w 等待進程死亡
 
--help 顯示幫助信息
 
--version 顯示版本顯示

 

4) kill

殺死進程最安全的方法是單純使用kill命令,不加修飾符,不帶標誌。
例如: # kill -pid  
註釋: 標準的kill命令,默認採用信號(signal)號是15,一般都能達到目的,終止有問題的進程,並把進程的資源釋放給系統。然而,若是進程啓動了子進程,只殺死父進程,子進程仍在運行,所以仍消耗資源。爲了防止這些所謂的「殭屍進程」,應確保在殺死父進程以前,先殺死其全部的子進程。  

 

5) kill -l

例如: kill -l PID 

-l 選項, 告訴kill命令用好像啓動進程的用戶已註銷的方式結束進程。當使用該選項時,kill命令也試圖殺死所留下的子進程。但這個命令也不是總能成功--或許仍然須要先手工殺死子進程,而後再殺死父進程。 

 

6) kill -HUP

有時候只想簡單的中止和重啓進程。
例如: # kill -HUP PID 
該命令讓Linux和緩的執行進程關閉,而後當即重啓。在配置應用程序的時候,這個命令很方便,在對配置文件修改後須要重啓進程時就能夠執行此命令。  

 

附錄:各類信號及其用途

Signal Description Signal number on Linux x86
SIGABRT Process aborted 6
SIGALRM Signal raised by alarm 14
SIGBUS Bus error: "access to undefined portion of memory object" 7
SIGCHLD Child process terminated, stopped (or continued*) 17
SIGCONT Continue if stopped 18
SIGFPE Floating point exception: "erroneous arithmetic operation" 8
SIGHUP Hangup 1
SIGILL Illegal instruction 4
SIGINT Interrupt 2
SIGKILL Kill (terminate immediately) 9
SIGPIPE Write to pipe with no one reading 13
SIGQUIT Quit and dump core 3
SIGSEGV Segmentation violation 11
SIGSTOP Stop executing temporarily 19
SIGTERM Termination (request to terminate) 15
SIGTSTP Terminal stop signal 20
SIGTTIN Background process attempting to read from tty ("in") 21
SIGTTOU Background process attempting to write to tty ("out") 22
SIGUSR1 User-defined 1 10
SIGUSR2 User-defined 2 12
SIGPOLL Pollable event 29
SIGPROF Profiling timer expired 27
SIGSYS Bad syscall 31
SIGTRAP Trace/breakpoint trap 5
SIGURG Urgent data available on socket 23
SIGVTALRM Signal raised by timer counting virtual time: "virtual timer expired" 26
SIGXCPU CPU time limit exceeded 24
SIGXFSZ File size limit exceeded 25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

killall -9的危害- -

                                      

killall -9 比如拿槍給你背後一槍把你打死,你沒有時間抵抗,更不用說立遺囑了 killall 就比如我告訴你「我想要你死!」,你能夠死,其實也能夠不死,一般,你能夠料理完後事而後再去死 客戶仍是至關聰明的,立刻就明白了。-------------------killall 是linux下面的命令,能夠終止系統中運行的進程,指令的格式是:killall
proc_name實際上是操做系統給名字叫作 proc_name的進程一個終止信號,比如古代皇上說,「朕想要你死」程序一般會乖乖的死掉,可是也能夠忽略這個信號,或者先保存好本身的金銀財寶,挖個坑,而後再跳下去。賜死太仁慈了,這樣,就有立刻終止一個進程的方式,那就是killall -9 proc_name這個能夠理解爲系統直接讓這個進程在系統裏面蒸發掉,沒有一點點商量!

------------------------------------------------------------------------------------------------------------------------------

 

 

會注意到這個問題是發現當用命令killall -9 hostapd了之後設備還在不停的發送beacon,而用killall hostapd就不會出現這個問題,因此看來必要時仍是須要先辦理完身後事再死啊。。。

相關文章
相關標籤/搜索