如何殺死未連接到任何終端的程序
我在 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
(-x
like ingrep
/ 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