pkill 不杀

rim*_*han 1 process kill

我试图杀死一个进程使用 pkill -9 <pid>

每当我运行该命令时,它什么都不返回,并且进程也不会被终止。

我现在如何进行?

编辑:

尝试pkill与 pid一起使用时我很愚蠢。pkill采用进程的名称而不是 pid。kill是接受的答案中指出的采用 pid 的命令。

然而,另一个答案实际上很好地解释了 pkill 不杀死的实际可能性,并且写得很好。

use*_*489 7

Kill -9 不会杀死进程的原因有以下三个。(旧手册页将其标记为“以极端偏见杀死”。进程无法避免 -9,但只能延迟其死亡。)

ps -O stat -p 1234例如,您可以检查该过程。检查状态 (S) 列:

进程不会立即因 -9 终止的三个原因是:

  • 它已经死了——它是一个僵尸。(status=Z) 当其父进程等待它(并收集僵尸进程)或父进程本身死亡时,它将消失。
  • 它陷入设备等待状态。(status=D) 杀死这些的唯一方法是让设备释放它或重新启动。这可能需要等待,或物理操作设备,或一些其他带外方式来“踢”卡住的设备。(在极少数情况下,重新启动会失败并挂起,您必须重新启动电源。)
  • 它已挂起(status=T),在这种情况下,kill -9确实会杀死它,但直到进程恢复(kill -CONT)后它实际上才会死亡

Kill 命令实际上会返回一些内容,尽管如果成功,则不会打印任何内容。所有命令都有返回值。echo $?您可以在运行命令后立即检查它。如果返回值为 0,则杀死成功并且不会打印任何内容。任何其他值都是错误,并且应该打印错误;可能的错误可能是“权限被拒绝”(或不允许操作)和“没有这样的过程”。pkill 有一些稍微有趣的错误。


小智 6

如果我没记错的话(我从不使用它) pkill 使用进程名称,而不是 PID。要使用 PID,请使用 kill 而不是 pkill。