kill 從字面來看,就是用來殺死進程的命令,但事實上,這個或多或少帶有一定的誤導性。從本質(zhì)上講,kill 命令只是用來向進程發(fā)送一個信號,至于這個信號是什么,是用戶指定的。
也就是說,kill 命令的執(zhí)行原理是這樣的,kill 命令會向操作系統(tǒng)內(nèi)核發(fā)送一個信號(多是終止信號)和目標進程的 PID,然后系統(tǒng)內(nèi)核根據(jù)收到的信號類型,對指定進程進行相應的操作。
kill 命令的基本格式如下:
[root@localhost ~]# kill [信號] PID
如果后臺中有多個命令,可以用fg %jobnumber(是命令編號linux命令,不是進程號)將選中的命令調(diào)出。system()會調(diào)用fork()產(chǎn)生子進程, 由子進程來調(diào)用/bin/sh-c string 來執(zhí)行參數(shù)string 字符串所代表的命令, 此命令執(zhí)行完后隨即返回原調(diào)用的進程. 在調(diào)用system()期間sigchld 信號會被暫時擱置,sigint 和sigquit 信號則會被忽略。以下是所涉及到的dos命令詳解及windows常用進程:一、tasklist命令:tasklist [/s system [/u username [/p [password]]]][/m [module] | /svc | /v] [/fi filter] [/fo format] [/nh]描述:這個命令行工具顯示應用程序和本地或遠程系統(tǒng)上運行的相關(guān)任務/進程的列表。
表 1 kill命令常用信號及其含義信號編號信號名含義
EXIT
程序退出時收到該信息。
掛掉電話線或終端連接的掛起信號,這個信號也會造成某些進程在沒有終止的情況下重新初始化。
如果你用的是xp系統(tǒng),這個進程在“任務管理器”中就結(jié)束不掉,結(jié)束掉的進程說明這個進程不能對系統(tǒng)造成直接危害,不過,用其它軟件可能能強制結(jié)束,但這樣會造成藍屏等現(xiàn)象。父子進程共同組成一個進程組,這樣linux命令,當從鍵盤發(fā)出一個信號時,該信號被送給當前與鍵盤相關(guān)的進程組中的所有成員。一旦發(fā)現(xiàn)某個進程有問題,可以直接右鍵結(jié)束它,甚至刪除它,如果正常結(jié)束不了,還有強制結(jié)束選項,這點對我們處理一些頑固進程非常有好處。
QUIT
退出。
KILL
殺死進程,即強制結(jié)束進程。
SEGV
段錯誤。
TERM
正常結(jié)束進程,是kill 命令的默認信號。
需要注意的是,表中省略了各個信號名稱的前綴 SIG,也就是說,SIGTERM 和 TERM 這兩種寫法都對,kill 命令都可以理解。
下面,我們舉幾個例子來說明一下 kill 命令。
【例 1】 標準 kill 命令。
[root@localhost ~】# service httpd start
#啟動RPM包默認安裝的apache服務
[root@localhost ~]# pstree -p 丨 grep httpd | grep -v "grep"
#查看 httpd 的進程樹及 PID。grep 命令査看 httpd 也會生成包含"httpd"關(guān)鍵字的進程,所以使用“-v”反向選擇包含“grep”關(guān)鍵字的進程,這里使用 pstree 命令來查詢進程,當然也可以使用 ps 和 top 命令
|-httpd(2246)-+-httpd(2247)
| |-httpd(2248)
| |-httpd(2249)
| |-httpd(2250)
| |-httpd(2251)
[root@localhost ~]# kill 2248
#殺死PID是2248的httpd進程,默認信號是15,正常停止
#如果默認信號15不能殺死進程,則可以嘗試-9信號,強制殺死進程