杀死-9个程序,但它们仍然挂起


11

我试图杀死我早些时候在KUbuntu下提交的所有后台工作

kill -9 $(jobs -p)

尽管此命令立即给出如下消息

[1]杀死了myjob1

[2]杀死了myjob2

我仍然可以看到它们的进程挂在top的输出中,并且正常运行时间和空闲时间的输出中未更改CPU和内存使用情况。

所以我想我一定没有正确杀死他们。有人可以解释一下我发生了什么事,我该怎么办?

我发现,最重要的是,如果键入k并输入PID,则可以一个接一个地杀死进程。那么这与命令kill有什么不同?

我还在网上http://www.ruhr.de/home/smallo/award.html上找到了有关不推荐杀死-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”?

谢谢并恭祝安康!


删除二进制文件(可执行文件)本身不会终止该过程。文件系统将知道该进程正在使用该文件,即使删除了该文件,该进程也会让该进程“查看”该文件。
杰普·斯蒂格·尼尔森

Answers:


9

您的进程可能已死,但由于它是“僵尸进程”,因此仍显示在进程表条目中。当子进程终止并完全消失(其进程表条目除外)且父进程将无法获取其终止状态(通过任何等待功能)时,它称为僵尸……杀死(通过信号)僵尸不会工作,因为它已经终止了。您需要做的是找出其父进程并干净地杀死它,从而不使用kill-9

这是杀死僵尸的两个简单步骤...

  1. 如果父母还活着,请尝试杀死它(或者只需要SIGHUP)
  2. 如果1号失败,则说明内核中存在错误。...重新启动是您的朋友,请修复该错误:->

我在命令行提交工作,并且在后台提交,他们的父母是谁?我如何找到他们的父母?
蒂姆(Tim)2009年

使用该-f标志ps可以查看父进程。
杰克M.09年

6

man kill有关可用信号的定义,请参见。

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

尽管它们指示了一些不同的原因,但它们告知一个过程用户已“完成”该过程。SIGTERM可能被解释为“完成当前任务,然后退出;不要启动另一个任务”,SIGINT的意思是“放弃您的操作“正在做并退出”,SIGHUP只是意味着没有人在听(服务器进程可能会通过停止其控制台输出并继续运行来对SIGHUP做出合理的反应)。

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

最重要的是,如果输入k并输入PID,则I可以一一杀死进程。那么,这等同于命令kill的某些选项吗?
蒂姆(Tim)2009年

是的,top只会向进程发送一个信号,就像kill一样。AFAICT,最上面使用的默认信号是15(SIGTERM)。
puetzk


1

这意味着键入“ kill -1”或“ kill -15”,而不是键入“ kill -9”。Kill -9是任何正在运行的进程中的核心子弹,可以将其杀死,使其处于肮脏的状态,从而导致内存泄漏,等等。

如果您输入kill -9并且它不起作用,那么我希望确保该进程没有重新生成,并且您具有杀死该进程的权限。


您如何看待以确保不会重生该过程?由于我拥有这些流程,因此我是否有权终止该流程?
蒂姆(Tim)2009年

如果是的话,它应该具有不同的进程号。因此,如果您执行ps -Al并看到processA,然后杀死-9 processA,然后执行ps -Al并且在进程队列中还有STILLA,请确保它是相同的processA,而不是新的。
2009年

它会告诉您是否没有终止该进程的权限。
2009年

0

信号9是SIGKILL。发送SIGKILL要求操作系统立即终止该进程,没有任何问题。该过程不会提前得到通知,并且没有机会自行清理。

信号15是SIGTERM。发送SIGTERM要求操作系统要求进程自行关闭。

如果OS认为进程正在执行IO,或者它是Zombie(子进程,其父进程未对其进行清理),则可以忽略SIGKILL。

SIGTERM可能会被应用程序忽略,但不建议应用程序执行此操作,因为操作系统会在关机期间发送SIGTERM,如果程序仍在运行,则紧接着是SIGKILL。

注意:命令行kill始终要求操作系统向应用程序发送信号,它可能会或可能不会根据拥有进程的人等来执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.