是否有可靠的方法来杀死给定用户的所有进程? 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