kill -9 程序,但它们仍然挂起

Tim*_*Tim 11 linux kill process

我试图杀死我之前在 KUbuntu 下提交的所有后台作业

kill -9 $(jobs -p)
Run Code Online (Sandbox Code Playgroud)

虽然这个命令立即给出了这样的消息

[1] 杀死了 myjob1

[2] 杀死了 myjob2

我仍然可以看到他们的进程挂在 top 的输出中,CPU 和内存使用情况在 uptime 和 free 的输出中没有改变。

所以我想我一定没有正确地杀死他们。有人可以解释一下发生在我身上的事情,我该怎么办?

我发现在上面,如果输入 k 并输入 PID 我可以一个一个地杀死进程。SO 这与命令 kill 不同吗?

我也在网上某处找到了http://www.ruhr.de/home/smallo/award.html关于不推荐 kill -9

Kill -9 格式信函的无用使用

(引用可恶)

不不不。不要使用kill -9。

它没有给进程一个干净的机会:

1) 关闭套接字连接

2)清理临时文件

3)通知它的孩子它正在消失

4) 重置其终端特性

等等等等等等。

通常,发送 15,然后等待一两秒钟,如果这不起作用,则发送 2,如果不起作用,则发送 1。如果没有,请删除二进制文件,因为该程序表现不佳!

不要使用kill -9。不要为了整理花盆而拿出联合收割机。

这是真的?“发送15”、“发送2”和“发送1”是什么意思?他们是自己命令还是“kill -15 PID”、“kill -2 PID”和“kill -1 PID”?

感谢致敬!

nkr*_*1pt 9

你的进程可能已经死了,但它仍然显示在进程表条目中,因为它是一个“僵尸进程”。当子进程终止并完全消失(除了它的进程表条目)并且父进程无法获取其终止状态(通过任何等待函数)时,它被称为僵尸......杀死(通过信号)僵尸不会工作,因为它已经终止。你需要做的是找出它的父进程并杀死 thjat one,从而不使用 kill - 9

这里有两个简单的步骤来杀死僵尸......

  1. 如果父母还活着,尝试杀死它(或者 SIGHUP 就是你所需要的)
  2. 如果编号 1 失败,则内核中存在错误...重启是您的朋友并修复该错误:->


pue*_*tzk 6

man kill有关可用的各种信号的定义,请参阅,但是是的。

  • 15 是SIGTERM,并要求程序退出。
  • 2 是SIGINT,相当于 Control-C
  • 1 是SIGHUP,表示终端挂断了。

这些通知进程用户已经“完成”了进程,尽管它们表明了一些不同的原因。SIGTERM 可能被解释为“完成当前任务,然后退出;不要开始另一个”,SIGINT 意味着“放弃你的“正在执行并退出”,SIGHUP 只是意味着没有人再听了(服务器进程可能会通过停止其控制台输出并继续运行来合法地对 SIGHUP 做出反应)。

  • 9 是SIGKILL,它的特殊之处在于它是进程无法在内部捕获和处理的唯一一个。它只会导致内核永远不会返回对进程的控制,使其没有机会进行清理。


Adr*_*zza 1

它确实意味着使用kill -15 PID(或另一个数字)而不是kill -9 PID. 这些数字相当于不同的unix信号