Kill

如何殺死未連接到任何終端的程序

  • March 20, 2018

我在 OpenVZ VPS 上,我以非 root 使用者身份創建了一個後台程序,然後拒絕了它,即

user@server:~$node server.js &
user@server:~$disown

我通過 SSH 退出了 VPS,現在我又回來了,但我似乎無法使用它的 PID 來終止該程序。Pkill 1292. 它甚至以 root 身份失敗。我知道它沒有死,因為當我執行top它直到執行時。另外,當我執行時,ps -l -p 1292我可以看到該過程一直在執行。

我可以說該程序未附加到任何終端會話,因為ps命令在 TTY 上顯示一個問號,即

截屏

我如何殺死這個程序?

pkill(就像pgrep它使用相同的界面,最初是一個 Solaris 命令,現在可以在包括 Linux(procps包)在內的許多其他 unix-likes 上找到)是根據它們的名稱來殺死程序。

pkill regexp

殺死(發送信號)到名稱¹ 與給定正則表達式匹配的SIGTERM所有程序。

所以這裡pkill node會殺死名稱包含的所有程序node。使用pkill -x node( -xlike in grep/ for精確pgrep匹配) 殺死名稱為. node

要基於 pid² 殺死,它只是kill(大多數 shell 中內置的命令,因此它也可以用於 shell 作業,但也可以作為獨立實用程序)。

如果kill 6806(簡稱kill -s TERM 6806)失敗,你可以作為最後的嘗試kill -s KILL 6806,它會非優雅地終止它


¹程序名稱是一個因作業系統而異的概念。在 Linux 上,通常最多為程序(或其最近的祖先)執行的文件的基本名稱的前 15 個字節,儘管程序可以將其更改為任意值(但不超過 15 個字節)。另請參閱pkill -f以匹配參數列表。

²kill也可以根據程序id進行kill。向程序組 id 為 123 的所有程序發送 SIGTERM 信號。當使用POSIX shell 的內置kill -- -123作業規範時(如),通常也會向程序發送信號。kill``kill %spec``kill

引用自:https://unix.stackexchange.com/questions/432362