dedecms 如何關(guān)閉網(wǎng)站搜狗站長
kill命令的功能是殺死(結(jié)束)進程。Linux系統(tǒng)中如需結(jié)束某個進程,既可以使用如service或systemctl這樣的管理命令來結(jié)束服務(wù),也可以使用kill命令直接結(jié)束進程信息。
?如使用kill命令后進程并沒有結(jié)束,則可以使用信號9進行強制殺死動作。
一、語法格式:
kill 參數(shù) 進程號
二、命令參數(shù)
-l??信號,若果不加信號的編號參數(shù),則使用“-l”參數(shù)會列出全部的信號名稱
-a??當處理當前進程時,不限制命令名和進程號的對應(yīng)關(guān)系
-p??指定kill?命令只打印相關(guān)進程的進程號,而不發(fā)送任何信號
-s??指定發(fā)送信號
-u??指定用戶?
三、信號參數(shù)
kill -l 查看所有的信號參數(shù)
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權(quán)利忽略。 下面是常用的前15個信號:
1)SIGHUP信號用于斷開進程與父進程的連接,這也可以用于重新啟動進程,這對于內(nèi)存泄漏的守護程序很有用。終端斷線
用途:當控制終端(通常是終端會話)結(jié)束或掛起時發(fā)送。常用于通知守護進程(daemon)重新讀取配置文件。
2)SIGINT: 該信號與按Ctrl+C相同,在某些系統(tǒng)上delete + break會向進程發(fā)送相同的信號,該進程被中斷并停止,但是該進程自身可以忽略此信號。
用途:當用戶按下中斷鍵(通常是Ctrl+C)時發(fā)送。用于中斷前臺進程。
3)SIGQUIT: 這類似于SIGINT,但由于QUIT字符通常是由Ctrl+\來控制,進程在收到SIGQUIT退出時會產(chǎn)生core文件, 在這個意義上類似于一個程序錯誤信號。?退出(同 Ctrl + \)
用途:與SIGINT類似,但會產(chǎn)生核心轉(zhuǎn)儲(core dump)。常用于調(diào)試。
4)SIGILL: 當一個進程執(zhí)行一個錯誤的、禁止的或未知的功能時,系統(tǒng)向該進程發(fā)送SIGILL信號,這是代表非法操作的信號。
用途:當進程執(zhí)行了非法或未知的指令時發(fā)送。用于指示進程中的指令錯誤。
5)SIGTRAP: 此信號用于調(diào)試目的,當某個進程執(zhí)行了某個操作或滿足了調(diào)試器正在等待的條件時,此信號將被發(fā)送到該進程。
用途:常用于調(diào)試器,當遇到斷點(breakpoint)時暫停進程。
6)SIGABRT: 該終止信號是中止信號,通常進程會在自身上發(fā)出此終止信號。
用途:當程序調(diào)用abort()函數(shù)時發(fā)送。用于程序自我終止并可能產(chǎn)生核心轉(zhuǎn)儲。
7)SIGBUS: 當一個進程被發(fā)送SIGBUS信號時,是因為該進程導致了一個總線錯誤,通常這些總線錯誤是由于進程試圖使用假物理地址或進程的內(nèi)存對齊設(shè)置不正確造成的。
用途:模擬指令異常,較少使用。
8)SIGFPE: 被零除的進程使用SIGFPE終止。
用途:當發(fā)生浮點錯誤(如除以零)時發(fā)送。用于指示浮點運算中的錯誤。
9)SIGKILL: SIGKILL這是一個強制終止信號,進程不能忽略它。當 SIGTERM 信號無效或需要立即終止進程時,可以使用此信號。。強制終止
用途:強制終止進程。該信號不能被進程忽略或捕獲,常用于強制結(jié)束無法響應(yīng)的進程。
10)SIGUSR1: 這表示用戶定義的條件,用戶可以通過在sigusr1.c中編程命令來設(shè)置此信號。
用途:當進程訪問了無效的內(nèi)存地址或發(fā)生了其他總線錯誤時發(fā)送。
11)SIGSEGV: 當應(yīng)用程序有分段沖突時,這個信號被發(fā)送到進程。
用途:當進程訪問了無效的內(nèi)存地址時發(fā)送,也稱為段錯誤。
- SIGUSR2: 這表示用戶定義的條件。
用途:當進程執(zhí)行了非法的系統(tǒng)調(diào)用時發(fā)送。
- SIGPIPE: 當進程嘗試寫入缺少與讀取器連接的一端的管道時,此信號將發(fā)送到進程,讀取器是在管道末端讀取數(shù)據(jù)的過程。
用途:當進程向沒有讀者的管道寫數(shù)據(jù)時發(fā)送。通常用于指示管道問題。
- SIGALRM: 當實時或時鐘計時器到期時,將發(fā)送SIGALRM。:通常用于實現(xiàn)定時器或超時功能。
用途:定時器到期時發(fā)送。常用于實現(xiàn)定時器或超時功能。
- SIGTERM:這是 kill 命令的默認信號。它會請求進程優(yōu)雅地終止,允許進程在退出前執(zhí)行清理操作。進程可以選擇忽略這個信號,但大多數(shù)進程會響應(yīng)并正常退出。
用途:請求進程終止。默認的信號,進程可以捕獲該信號并執(zhí)行清理操作后退出。
四、注意:
1、kill命令可以帶信號號碼選項,也可以不帶。如果沒有信號號碼,kill命令就會發(fā)出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理并釋放資源。也可以用kill向進程發(fā)送特定的信號。例如:
kill -2 123
它的效果等同于在前臺運行PID為123的進程時按下Ctrl+C鍵。但是,普通用戶只能使用不帶signal參數(shù)的kill命令或最多使用-9信號。
2、kill可以帶有進程ID號作為參數(shù)。當用kill向這些進程發(fā)送信號時,必須是這些進程的主人。如果試圖撤銷一個沒有權(quán)限撤銷的進程或撤銷一個不存在的進程,就會得到一個錯誤信息。
3、可以向多個進程發(fā)信號或終止它們。
4、當kill成功地發(fā)送了信號后,shell會在屏幕上顯示出進程的終止信息。有時這個信息不會馬上顯示,只有當按下Enter鍵使shell的命令提示符再次出現(xiàn)時,才會顯示出來。
5、應(yīng)注意,信號使進程強行終止,這常會帶來一些副作用,如數(shù)據(jù)丟失或者終端無法恢復到正常狀態(tài)。發(fā)送信號時必須小心,只有在萬不得已時,才用kill信號(9),因為進程不能首先捕獲它。要撤銷所有的后臺作業(yè),可以輸入kill 0。因為有些在后臺運行的命令會啟動多個進程,跟蹤并找到所有要殺掉的進程的PID是件很麻煩的事。這時,使用kill 0來終止所有由當前shell啟動的進程,是個有效的方法。
五、實例
1)得到指定信號的數(shù)值
> kill -l KILL
9
2)先用ps查找進程,然后用kill殺掉
> ps -ef | grep java
root ????16934 ????1 ?0 Feb25 ? ???????00:18:13 java -jar demo.jar
//徹底殺死該進程
> kill -9 16934
3)強制殺死所有和java相關(guān)的所有進程
> kill -9 $(ps -ef | grep java)
4)強制殺死deploy用戶起的進程
> kill -u deploy
5)init進程是不可殺的
> kill -9 1