linux中kill命令的參數(shù)以及示例分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)公司服務(wù)項目包括巫山網(wǎng)站建設(shè)、巫山網(wǎng)站制作、巫山網(wǎng)頁制作以及巫山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,巫山網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到巫山省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
kill號令用于終止指定的過程(terminate a process),是Unix/Linux下過程經(jīng)管的常用號令。凡是,我們在須要終止某個或某些過程時,先應(yīng)用ps/pidof/pstree/top等對象獲取過程PID,然后應(yīng)用kill號令來殺掉該過程。kill號令的別的一個用處就是向指定的過程或過程組發(fā)送旌旗燈號(The command kill sends the specified signal to the specified process or process group),或者斷定過程號為PID的過程是否還在。比如,有很多法度都把SIGHUP旌旗燈號作為從頭讀取設(shè)備文件的觸發(fā)前提。
一 常用參數(shù)
格式:kill
格式:kill -TERM
發(fā)送SIGTERM旌旗燈號到指定過程,若是過程沒有捕獲該旌旗燈號,則過程終止(If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal.)
格式:kill -l
列出所有旌旗燈號名稱(Print a list of signal names. These are found in /usr/include/linux/signal.h)。只有第9種旌旗燈號(SIGKILL)才可以無前提終止過程,其他旌旗燈號過程都有權(quán)力忽視。下面是常用的旌旗燈號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + )
TERM 15 終止
KILL 9 強(qiáng)迫終止
CONT 18 持續(xù)(與STOP相反, fg/bg號令)
STOP 19 暫停(同 Ctrl + Z)
格式:kill -l
顯示指定旌旗燈號的數(shù)值。
格式:kill -9
格式:kill -KILL
強(qiáng)迫殺掉指定過程,無前提終止指定過程。
格式:kill %
格式:kill -9 %
殺掉指定的任務(wù)(應(yīng)用jobs號令可以列出)
格式:kill -QUIT
格式:kill -3
使得法度正常的退出。
killall號令
killall號令殺死同一過程組內(nèi)的所有過程。其容許指定要終止的過程的名稱,而非PID。
# killall httpd
二、示例
1)先用ps查找過程,然后用kill殺掉。
[root@new55 ~]# ps -ef|grep vim
root 3368 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@new55 ~]# kill 3368
[root@new55 ~]# kill 3368
-bash: kill: (3368) - 沒有那個過程
三、kill signal
01 | $ kill -l |
02 | 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL |
03 | 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE |
04 | 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 |
05 | 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT |
06 | 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP |
07 | 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU |
08 | 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH |
09 | 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN |
10 | 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 |
11 | 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 |
12 | 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 |
13 | 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 |
14 | 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 |
15 | 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 |
16 | 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 |
17 | 63) SIGRTMAX-1 64) SIGRTMAX |
列表中,編號為1 ~ 31的信號為傳統(tǒng)UNIX支持的信號,是不可靠信號(非實時的),編號為32 ~ 63的信號是后來擴(kuò)充的,稱做可靠信號(實時信號)。不可靠信號和可靠信號的區(qū)別在于前者不支持排隊,可能會造成信號丟失,而后者不會。
下面我們對編號小于SIGRTMIN的信號進(jìn)行討論。
1) SIGHUP
本信號在用戶終端連接(正?;蚍钦?結(jié)束時發(fā)出, 通常是在終端的控制進(jìn)程結(jié)束時, 通知同一session內(nèi)的各個作業(yè), 這時它們與控制終端不再關(guān)聯(lián)。
登錄Linux時,系統(tǒng)會分配給登錄用戶一個終端(Session)。在這個終端運行的所有程序,包括前臺進(jìn)程組和后臺進(jìn)程組,一般都屬于這個 Session。當(dāng)用戶退出Linux登錄時,前臺進(jìn)程組和后臺有對終端輸出的進(jìn)程將會收到SIGHUP信號。這個信號的默認(rèn)操作為終止進(jìn)程,因此前臺進(jìn) 程組和后臺有終端輸出的進(jìn)程就會中止。不過可以捕獲這個信號,比如wget能捕獲SIGHUP信號,并忽略它,這樣就算退出了Linux登錄,wget也 能繼續(xù)下載。
此外,對于與終端脫離關(guān)系的守護(hù)進(jìn)程,這個信號用于通知它重新讀取配置文件。
2) SIGINT
程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發(fā)出,用于通知前臺進(jìn)程組終止進(jìn)程。
3) SIGQUIT
和SIGINT類似, 但由QUIT字符(通常是Ctrl-)來控制. 進(jìn)程在因收到SIGQUIT退出時會產(chǎn)生core文件, 在這個意義上類似于一個程序錯誤信號。
4) SIGILL
執(zhí)行了非法指令. 通常是因為可執(zhí)行文件本身出現(xiàn)錯誤, 或者試圖執(zhí)行數(shù)據(jù)段. 堆棧溢出時也有可能產(chǎn)生這個信號。
5) SIGTRAP
由斷點指令或其它trap指令產(chǎn)生. 由debugger使用。
6) SIGABRT
調(diào)用abort函數(shù)生成的信號。
7) SIGBUS
非法地址, 包括內(nèi)存地址對齊(alignment)出錯。比如訪問一個四個字長的整數(shù), 但其地址不是4的倍數(shù)。它與SIGSEGV的區(qū)別在于后者是由于對合法存儲地址的非法訪問觸發(fā)的(如訪問不屬于自己存儲空間或只讀存儲空間)。
8) SIGFPE
在發(fā)生致命的算術(shù)運算錯誤時發(fā)出. 不僅包括浮點運算錯誤, 還包括溢出及除數(shù)為0等其它所有的算術(shù)的錯誤。
9) SIGKILL
用來立即結(jié)束程序的運行. 本信號不能被阻塞、處理和忽略。如果管理員發(fā)現(xiàn)某個進(jìn)程終止不了,可嘗試發(fā)送這個信號。
10) SIGUSR1
留給用戶使用
11) SIGSEGV
試圖訪問未分配給自己的內(nèi)存, 或試圖往沒有寫權(quán)限的內(nèi)存地址寫數(shù)據(jù).
12) SIGUSR2
留給用戶使用
13) SIGPIPE
管道破裂。這個信號通常在進(jìn)程間通信產(chǎn)生,比如采用FIFO(管道)通信的兩個進(jìn)程,讀管道沒打開或者意外終止就往管道寫,寫進(jìn)程會收到SIGPIPE信號。此外用Socket通信的兩個進(jìn)程,寫進(jìn)程在寫Socket的時候,讀進(jìn)程已經(jīng)終止。
14) SIGALRM
時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數(shù)使用該信號.
15) SIGTERM
程序結(jié)束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill缺省產(chǎn)生這個信號。如果進(jìn)程終止不了,我們才會嘗試SIGKILL。
17) SIGCHLD
子進(jìn)程結(jié)束時, 父進(jìn)程會收到這個信號。
如果父進(jìn)程沒有處理這個信號,也沒有等待(wait)子進(jìn)程,子進(jìn)程雖然終止,但是還會在內(nèi)核進(jìn)程表中占有表項,這時的子進(jìn)程稱為僵尸進(jìn)程。這種情 況我們應(yīng)該避免(父進(jìn)程或者忽略SIGCHILD信號,或者捕捉它,或者wait它派生的子進(jìn)程,或者父進(jìn)程先終止,這時子進(jìn)程的終止自動由init進(jìn)程來接管)。
18) SIGCONT
讓一個停止(stopped)的進(jìn)程繼續(xù)執(zhí)行. 本信號不能被阻塞. 可以用一個handler來讓程序在由stopped狀態(tài)變?yōu)槔^續(xù)執(zhí)行時完成特定的工作. 例如, 重新顯示提示符...
19) SIGSTOP
停止(stopped)進(jìn)程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別:該進(jìn)程還未結(jié)束, 只是暫停執(zhí)行. 本信號不能被阻塞, 處理或忽略.
20) SIGTSTP
停止進(jìn)程的運行, 但該信號可以被處理和忽略. 用戶鍵入SUSP字符時(通常是Ctrl-Z)發(fā)出這個信號
21) SIGTTIN
當(dāng)后臺作業(yè)要從用戶終端讀數(shù)據(jù)時, 該作業(yè)中的所有進(jìn)程會收到SIGTTIN信號. 缺省時這些進(jìn)程會停止執(zhí)行.
22) SIGTTOU
類似于SIGTTIN, 但在寫終端(或修改終端模式)時收到.
23) SIGURG
有"緊急"數(shù)據(jù)或out-of-band數(shù)據(jù)到達(dá)socket時產(chǎn)生.
24) SIGXCPU
超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。
25) SIGXFSZ
當(dāng)進(jìn)程企圖擴(kuò)大文件以至于超過文件大小資源限制。
26) SIGVTALRM
虛擬時鐘信號. 類似于SIGALRM, 但是計算的是該進(jìn)程占用的CPU時間.
27) SIGPROF
類似于SIGALRM/SIGVTALRM, 但包括該進(jìn)程用的CPU時間以及系統(tǒng)調(diào)用的時間.
28) SIGWINCH
窗口大小改變時發(fā)出.
29) SIGIO
文件描述符準(zhǔn)備就緒, 可以開始進(jìn)行輸入/輸出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系統(tǒng)調(diào)用。
在以上列出的信號中,程序不可捕獲、阻塞或忽略的信號有:SIGKILL,SIGSTOP
不能恢復(fù)至默認(rèn)動作的信號有:SIGILL,SIGTRAP
默認(rèn)會導(dǎo)致進(jìn)程流產(chǎn)的信號有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默認(rèn)會導(dǎo)致進(jìn)程退出的信號有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默認(rèn)會導(dǎo)致進(jìn)程停止的信號有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默認(rèn)進(jìn)程忽略的信號有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在進(jìn)程掛起時是繼續(xù),否則是忽略,不能被阻塞。
看完上述內(nèi)容,你們掌握linux中kill命令的參數(shù)以及示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!