【问题标题】:Kill command in UNIXUNIX 中的 kill 命令
【发布时间】:2015-06-13 09:45:45
【问题描述】:

如果我执行以下命令,所有进程都将被杀死并且帐户 已注销。

命令:

kill -9 -1

类似于注销命令。在 Unix 中,没有 pid 为“-1”的进程。那么,造成这种结果的原因是什么?

【问题讨论】:

    标签: linux bash shell unix ubuntu


    【解决方案1】:

    查看手册页 (http://linux.die.net/man/2/kill)

    如果 pid 等于 -1,则 sig 被发送到每个进程 调用进程有权限发送信号,除了进程1 (init),但见下文。

    所以我猜那是你脱离了系统 - 但我们其他人的生活仍在继续

    PS:不优雅

    【讨论】:

      【解决方案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 -csleepps 三个进程发送一个TERM 信号。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • kill 命令的语法是“kill ”。这里的信号是可选的。那么,-1 代表什么。
        • kill -9 不是结束进程的干净方式。我很苛刻
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        • 2015-09-21
        • 2023-03-31
        相关资源
        最近更新 更多