很多同學在日常使用 Linux 中會經常使用 kill 命令來殺死進程,有的直接使用 kill,有的使用 kill -9,有的使用 kill -3,他們是什么意思呢,有什么區別呢,今天我們就了解一下 Kill 命令和 Linux 中的信號。Kill命令
kill命令的格式是 kill -Signal pid,其中 pid 就是進程的編號,signal是發送給進程的信號,默認參數下,kill 發送 SIGTERM(15)信號給進程,告訴進程,你需要被關閉,請自行停止運行並退出。
查看Kill命令的Signal信號列表可以使用命令:kill -l 來查看:
kill、kill -9、kill -3的區別

Linux Signal 信號
Linux支持POSIX標准信號和實時信號。下面給出Linux Signal的簡表:
信號 | 取值 | 默認動作 | 含義(發出信號的原因) |
SIGHUP | 1 | Term | 終端的掛斷或進程死亡 |
SIGINT | 2 | Term | 來自鍵盤的中斷信號 |
SIGQUIT | 3 | Core | 來自鍵盤的離開信號 |
SIGILL | 4 | Core | 非法指令 |
SIGABRT | 6 | Core | 來自abort的異常信號 |
SIGFPE | 8 | Core | 浮點例外 |
SIGKILL | 9 | Term | 殺死 |
SIGSEGV | 11 | Core | 段非法錯誤(內存引用無效) |
SIGPIPE | 13 | Term | 管道損壞:向一個沒有讀進程的管道寫數據 |
SIGALRM | 14 | Term | 來自alarm的計時器到時信號 |
SIGTERM | 15 | Term | 終止 |
SIGUSR1 | 30,10,16 | Term | 用戶自定義信號1 |
SIGUSR2 | 31,12,17 | Term | 用戶自定義信號2 |
SIGCHLD | 20,17,18 | Ign | 子進程停止或終止 |
SIGCONT | 19,18,25 | Cont | 如果停止,繼續執行 |
SIGSTOP | 17,19,23 | Stop | 非來自終端的停止信號 |
SIGTSTP | 18,20,24 | Stop | 來自終端的停止信號 |
SIGTTIN | 21,21,26 | Stop | 后台進程讀終端 |
SIGTTOU | 22,22,27 | Stop | 后台進程寫終端 |
SIGBUS | 10,7,10 | Core | 總線錯誤(內存訪問錯誤) |
SIGPOLL | Term | Pollable事件發生(Sys V),與SIGIO同義 | |
SIGPROF | 27,27,29 | Term | 統計分布圖用計時器到時 |
SIGSYS | 12,-,12 | Core | 非法系統調用(SVr4) |
SIGTRAP | 5 | Core | 跟蹤/斷點自陷 |
SIGURG | 16,23,21 | Ign | socket緊急信號(4.2BSD) |
SIGVTALRM | 26,26,28 | Term | 虛擬計時器到時(4.2BSD) |
SIGXCPU | 24,24,30 | Core | 超過CPU時限(4.2BSD) |
SIGXFSZ | 25,25,31 | Core | 超過文件長度限制(4.2BSD) |
SIGIOT | 6 | Core | IOT自陷,與SIGABRT同義 |
SIGEMT | 7,-,7 | Term | |
SIGSTKFLT | -,16,- | Term | 協處理器堆棧錯誤(不使用) |
SIGIO | 23,29,22 | Term | 描述符上可以進行I/O操作 |
SIGCLD | -,-,18 | Ign | 與SIGCHLD同義 |
SIGPWR | 29,30,19 | Term | 電力故障(System V) |
SIGINFO | 29,-,- | 與SIGPWR同義 | |
SIGLOST | -,-,- | Term | 文件鎖丟失 |
SIGWINCH | 28,28,20 | Ign | 窗口大小改變(4.3BSD, Sun) |
SIGUNUSED | -,31,- | Term | 未使用信號(will be SIGSYS) |
經過上面的學習,現在就知道他們的區別了吧。
kill 會默認傳15代表的信號為SIGTERM,這是告訴進程你需要被關閉,請自行停止運行並退出,進程可以清理緩存自行結束,也可以拒絕結束。
kill -9代表的信號是SIGKILL,表示進程被終止,需要立即退出,強制殺死該進程,這個信號不能被捕獲也不能被忽略。
kill -3可以打印進程各個線程的堆棧信息,kill -3 pid 后文件的保存路徑為:/proc/${pid}/cwd,文件名為:antBuilderOutput.log
總結
如果是讓進程自己執行退出離場程序就使用 kill 命令,這樣進程可以自己執行一些清理動作然后退出。如果進程卡死,你需要記錄當時的事故現場,那么應該用 kill -3 來記錄事故現場的信息然后退出。如果你什么也不需要,就是要殺死一個進程那么就是用 kill -9 命令,很暴力的殺死它。
------------
商業用途請聯系作者獲得授權。
版權聲明:本文為原創文章,遵循 CC BY-NC-SA 4.0 版權協議,轉載請附上原文出處鏈接及本聲明。
作者:任霏
來源: https://www.renfei.net/posts/1003370
=======================================================================================
商業用途請聯系作者獲得授權。
版權聲明:本文為原創文章,遵循 CC BY-NC-SA 4.0 版權協議,轉載請附上原文出處鏈接及本聲明。
作者:任霏
來源: https://www.renfei.net/posts/1003370
