如果我执行以下命令,则所有进程都将被终止并且帐户被终止 已退出。
命令:
kill -9 -1
它类似于logout命令。在Unix中,没有这样的进程具有pid为“-1”。那么,这个结果的原因是什么?
答案 0 :(得分:3)
请参阅手册页(http://linux.die.net/man/2/kill)
如果pid等于-1,则将sig发送到每个进程 调用进程有权发送信号,但进程1除外 (init),但见下文。
所以我猜你就是这个系统了 - 但我们其他人的生活仍在继续
PS:不优雅
答案 1 :(得分:2)
当kill
的pid参数以-
为前缀时,它会将信号发送给进程组。每个进程都有一个pid,但也有一个进程组ID。
你可以通过运行这个来看到:
$ bash -c 'sleep 10 & sleep 1; ps -o pid,ppid,pgrp,cmd'
PID PPID PGRP CMD
22471 22467 22471 -bash
22496 22471 22496 bash -c sleep 10 & sleep 1; ps -o pid,ppid,pgrp,cmd
22497 22496 22496 sleep 10
22499 22496 22496 ps -o pid,ppid,pgrp,cmd
在这里你可以看到bash -c
已经获得了自己的进程组(22496,与其PID相同),并且它的两个子进程(sleep和ps)继承了这个进程组。
kill -TERM 22496
会使用pid 22496向bash -c
进程发送TERM信号,而kill -TERM -22496
会向三个进程bash -c
,sleep
发送一个TERM信号}和ps
。
-1
是一种特殊情况,它将信号发送到您可以发送到的所有进程。
答案 2 :(得分:-1)
kill -9 -1消除了重新启动系统的需要,主要用于高效且干净地终止没有响应的程序。