pkill 不会杀死

pkill 不会杀死

我尝试使用以下方法终止进程pkill -9 <pid>

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

我现在该怎么办?

编辑:

我很愚蠢地尝试使用pkillpid。pkill采用进程名称而不是 pid。kill是采用 pid 的命令,正如接受的答案所指出的那样。

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

答案1

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

答案2

有三个原因可以解释为什么 kill -9 不会终止进程。(旧手册页将此标记为“极端谨慎地终止”。进程无法避免 -9,但只能延迟其终止。)

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

进程不会因-9立即死亡的三个原因是:

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

kill 命令确实会返回一些内容,但如果成功则不会打印任何东西。所有命令都有返回值。您可以echo $?在运行命令后立即检查它。如果返回值为 0,则 kill 成功,不会打印任何内容。任何其他值都是错误,它应该打印错误;可能的错误可能是权限被拒绝(或操作不允许)和没有这样的进程。pkill 有一些稍微有趣一点的错误。

相关内容