是否有可靠的方法來殺死給定用戶的所有進程? kill(-1, SIGKILL)
,因爲該用戶將工作,除非該用戶的流氓進程首先殺死該查殺進程。到目前爲止我所能找到的最好的方法是循環訪問該用戶的system("ps -u")
,並以這種方式殺死這些進程,但這看起來很詭異且效率低下。殺死給定用戶的所有進程
編輯:澄清,我特別要求一個POSIX兼容的解決方案。出於某種原因,我認爲標記問題posix會把它放在標題中。
是否有可靠的方法來殺死給定用戶的所有進程? kill(-1, SIGKILL)
,因爲該用戶將工作,除非該用戶的流氓進程首先殺死該查殺進程。到目前爲止我所能找到的最好的方法是循環訪問該用戶的system("ps -u")
,並以這種方式殺死這些進程,但這看起來很詭異且效率低下。殺死給定用戶的所有進程
編輯:澄清,我特別要求一個POSIX兼容的解決方案。出於某種原因,我認爲標記問題posix會把它放在標題中。
只是(臨時)殺了我的MacBook
killall -u pu -m .
其中PU是我的用戶ID。在命令末尾觀察點。
也可以嘗試
pkill -u pu
或
ps -o pid -u pu | xargs kill -1
謝謝,但AFAICT killall和pkill不屬於POSIX(見編輯我的問題) – 2013-03-16 17:23:11
是我剛剛添加與POSIX的命令? – uselpa 2013-03-16 17:37:20
啊,這是一個很好的!看起來像POSIX中定義的庫函數是不可能的,所以我會將其標記爲接受。 – 2013-03-17 00:32:45
迭代/ proc虛擬文件系統呢? http://linux.die.net/man/5/proc?
謝謝,但/ proc不是POSIX的一部分(請參閱編輯我的問題) – 2013-03-16 17:23:30
@Shea Levy沒有問題,請記住,「ps -u」本身也不是POSIX,而是更多* nix的:) – 2013-03-16 17:30:23
嗯,從我的閱讀http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.html它似乎是... – 2013-03-17 00:31:30
這裏是一個班輪做這個,只是你想殺死事情的用戶名替換用戶名。甚至不要考慮在那裏紮根!
pkill -9 -u `id -u username`
注意:如果你想要很好地移除-9,但它不會殺死所有類型的進程。
在Debian LINUX上,我使用:ps -o pid= -u username | xargs sudo kill -9
。
使用-o pid=
可以抑制ps頭,並且輸出只是pid列表。據我所知,Debian shell是POSIX兼容。
下殺死該用戶創建的所有進程:
kill -9 -1
根據POSIX,kill -9 -1被解釋爲kill(-1,SIGKILL)。「如果pid爲-1,則sig應發送給進程有權發送該信號的所有進程(不包括未指定的一組系統進程)。」因此,通過標準(以及在macOS上的FWIW),這也將殺死殺死進程本身。 – 2017-11-21 12:06:58
這是這裏值得一提的是,所有的解決方案(如通常是'kill'的情況下)有一個[TOCTOU(https://開頭CWE .mitre.org/data/definitions/367.html)競爭條件:在識別殺死它們的進程和殺死它們的進程之間,進程可能會死亡,其PID可能會被回收。或者該用戶擁有的新進程可能會產生,對您而言不爲人知。 – pilcrow 2015-09-09 18:20:47