在UNIX中杀死命令

时间:2015-06-13 09:45:46

标签: linux bash shell unix ubuntu

如果我执行以下命令,则所有进程都将被终止并且帐户被终止 已退出。

命令:

kill -9 -1

它类似于logout命令。在Unix中,没有这样的进程具有pid为“-1”。那么,这个结果的原因是什么?

3 个答案:

答案 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 -csleep发送一个TERM信号}和ps

然而,

-1是一种特殊情况,它将信号发送到您可以发送到的所有进程。

答案 2 :(得分:-1)

kill -9 -1消除了重新启动系统的需要,主要用于高效且干净地终止没有响应的程序。