杀死给定用户的所有进程


74

是否存在杀死给定用户的所有进程的可靠方法?kill(-1, SIGKILL)除非该用户的恶意进程先杀死了该杀死进程,否则该用户将继续工作。到目前为止,我能找到的最好的办法是system("ps -u")为该用户循环访问并以这种方式终止进程,但这似乎确实很麻烦且效率低下。

编辑:为澄清起见,我专门要求兼容POSIX的解决方案。由于某种原因,我认为标记问题posix会将其放在标题中。


4
值得注意的是,此处的所有解决方案(通常与情况一样kill)都具有TOCTOU竞争条件:在确定要杀死的进程与杀死它们之间,进程可能会死掉,并且其PID可能会被回收。否则可能会出现该用户拥有的新进程,而您对此并不了解。
pilcrow

我如何使用其UID杀死用户的所有进程如何在Linux杀死所有的进程,在Ubuntu中杀死所有用户的进程的可能重复项等等。具有讽刺意味的是,这个问题在2010年从Stack Overflow迁移到了Super User,但在这里仍然有人问。
jww

Answers:


103

只是(暂时)杀死了我的Macbook

killall -u pu -m .

pu是我的用户名。注意命令末尾的点。

也试试

pkill -u pu

要么

ps -o pid -u pu | xargs kill -1

谢谢,但是AFAICT killall和pkill不是POSIX的一部分(请参阅我的问题的编辑)
Shea Levy

1
啊,那是一个好人!看起来仅靠POSIX中定义的库函数是不可能的,因此我将其标记为接受。
Shea Levy

2
或者,您可以只键入“ killall -KILL -u uid”。无需指定-m参数。uid是用户的ID。
vwvolodya 2014年

用户将无法运行100个进程,每个进程检查其他进程的状态,如果一个进程被杀死,则启动一个新进程吗?
Jens Timmerman 2014年

pkill -u pu为我工作。我试图杀死后台进程,但同时运行太多进程以杀死每个进程。
2013年

50

这是一个执行此操作的衬板,只需将用户名替换为您要杀死的用户名即可。甚至不要考虑在这里扎根!

pkill -9 -u `id -u username`

注意:如果您想变好,请删除-9,但它不会杀死所有进程。


救我一口气。谢谢!
Benyamin Limanto

7

在Debian LINUX上,我使用:ps -o pid= -u username | xargs sudo kill -9

使用-o pid=ps标头将被禁止,并且输出仅是pid列表。据我所知,Debian shell是POSIX兼容的。


7

以下内容将杀死该用户创建的所有进程:

kill  -9  -1

3
根据POSIX,kill -9 -1被解释为kill(-1,SIGKILL)。“如果pid为-1,则sig应发送到该进程有权发送该信号的所有进程(不包括一组未指定的系统进程)。” 因此,按照标准(在macOS上为FWIW),这也将终止kill进程本身。
Shea Levy

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.