kill能殺死所有進程嗎?本文是一篇經驗性的文章分享,主要是用來分享在使用 uWSGI 運行後台服務的過程中,更新服務時需要先殺掉當前運行的 uWSGI 服務進程,然而卻出現 uWSGI 進程無法正常殺掉/結束的情況時的解決方案,今天小編就來說說關于kill能殺死所有進程嗎?下面更多詳細答案一起來看看吧!
本文是一篇經驗性的文章分享,主要是用來分享在使用 uWSGI 運行後台服務的過程中,更新服務時需要先殺掉當前運行的 uWSGI 服務進程,然而卻出現 uWSGI 進程無法正常殺掉/結束的情況時的解決方案。
uWSGI 的安裝可以參考uWSGI官方指南->安裝uWSGI ,但是考慮到 uWSGI 安裝會依賴 Python 和 C compiler 等組件,因此我極力推薦大家使用 Anaconda 進行安裝和管理。此節 uWSGI 的安裝簡單介紹主要是為了想驗證本文後續内容提供一個簡要支持。
待 uWSGI 安裝完成後,即可使用 uwsgi --ini uwsgin.ini 命令啟動 uWSGI 服務進程,服務進程啟動後可以通過 cat uwsgi.pid 或者 ps aux | grep uwsgi 查看當前 uWSGI 服務進程信息。
cat uwsgi.pid查看當前 uWSGI 服務進程信息注意cat uwsgi.pid命令中uwsgi.pid需要根據具體的日志目錄來查看,比如程序運行在/home/myuwsgi/目錄下,此時該文件會在/home/myuwsgi/目錄或者/home/myuwsgi/log/目錄下。
使用cat uwsgi.pid查看運行信息時,在打開的文件中會有如下信息:
WSGI app 0 (mountpoint='') ready in 7 seconds on interpreter 0x26db010 pid: 14614 (default app)uWSGI is running in multiple interpreter modespawned uWSGI master process (pid: 14614)spawned uWSGI worker 1 (pid: 14619, cores: 1)spawned uWSGI http 1 (pid: 14620)
其中uWSGI master process是主進程信息,uWSGI worker 1是工作線程信息,uWSGI http 1是負責處理http請求的工作線程信息。
此時如果使用kill 14614、kill 14614 14619 14620或者如下命令:
kill pidof uwsgi
會發現無論你執行多少次上述命令,uWSGI 服務進程都會自動重啟。
ps ax | grep uwsgi查看當前 uWSGI 服務進程信息使用ps ax | grep uwsgi查看運行信息時,會顯示如下信息:
14614 ? S 0:26 uwsgi --ini xxx.ini14619 ? Sl 10:56 uwsgi --ini xxx.ini14620 ? S 0:36 uwsgi --ini xxx.ini
此時如果重複上述 kill 命令進殺死 uWSGI 服務進程信息,會發現 uWSGI 服務進程都會自動重啟。
究其原因,其實上述 kill 命令執行時,默認會發送SIGTERM,因此會導緻 uWSGI 服務進程會重啟,而不是結束。
因此,要解決此問題,可以使用以下幾種方式進行解決:
killall -s INT uwsgipkill -f uwsgi -9
注意:此命令行中的 uwsgi 是uwsgi安裝路徑,安裝路徑可以使用 which uwsgi 查找。
擴展閱讀:killall -s INT uwsgi 命令中 INT 可以通過 kill -l 查看,顯示如下:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN 1 36) SIGRTMIN 2 37) SIGRTMIN 338) SIGRTMIN 4 39) SIGRTMIN 5 40) SIGRTMIN 6 41) SIGRTMIN 7 42) SIGRTMIN 843) SIGRTMIN 9 44) SIGRTMIN 10 45) SIGRTMIN 11 46) SIGRTMIN 12 47) SIGRTMIN 1348) SIGRTMIN 14 49) SIGRTMIN 15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX
其中 INT 表示 2) SIGINT ,因此該命令也可以改寫成如下形式 killall -s 2 uwsgi。同樣 killall -s 9 uwsgi 也滿足以上要求。
------完------
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!