在linux中杀死一个进程

时间:2010-06-29 11:16:47

标签: linux

server01:/# ps -ax | grep java

Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

 7342 pts/3    Z      0:00 [java] <defunct>

 7404 pts/3    S+     0:00 grep java


server01:/# kill 7342

server01:/# ps -ax | grep java

Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

 7342 pts/3    Z      0:00 [java] <defunct>

 7406 pts/3    S+     0:00 grep java


server01:/# 

在上面我使用ps命令知道java进程的pid,在上面的例子中是7342。

然后我使用kill命令杀死了那个进程。 但是这并没有被杀死,因为ps命令再次显示带有pid 7342的java进程。

我应该使用其他命令来终止进程吗?为什么kill无法终止进程

感谢名单

7 个答案:

答案 0 :(得分:6)

ps aux

然后

kill -1 PID_NUMBER

要求程序自行关闭,如果它没有回答你可以强行关闭

kill -9 PID_NUMBER

请记住,使用-9强制程序将在不询问而不保存任何内容的情况下完成 检查:男人杀了 了解更多详情

答案 1 :(得分:6)

Linux支持BSD样式切换到ps命令(没有前导 - ...破折号/连字符)。如果提供了hypen,则GNU coreutils版本ps(主流Linux发行版的标准版本)将尝试将交换机解释为SysV兼容。这是您的错误来源。

我建议使用交换机的BSD格式并查找-o选项以指定仅包含匹配进程的PID的输出格式。

你也试图杀死一个僵尸。正如你所发现的那样,这是徒劳的。僵尸是一个占位符,可以处理已经死亡的进程。它保留在进程表中,直到其父进程“获取”其退出代码。如果父进程从不进行wait()系统调用,则该条目将保留在那里直到父进程被终止,此时僵尸(以及任何其他孤立进程)将由init进程继承。 Linux(或任何其他形式的UNIX)下的正常init会定期收回所有死进程(僵尸)。

从概念上讲,在UNIX / Linux系统上退出的每个进程都会花费少量时间作为“僵尸”......在进程终止和其他进程之间总是应该有一段时间读取它的退出值(即使只是丢弃它,如init那样)。

这个问题确实应该放在ServerFault

答案 2 :(得分:4)

kill -9可以作为最后的手段来确保该过程死亡.....

答案 3 :(得分:1)

该过程被列为已失效。它的工作已经完成并且因为父进程仍在那里而保持不变。但是,如果父进程崩溃或被kill -9杀死,则没有父进程,因此已关闭的进程将一直保留到重新引导。 已解散(或僵尸)进程仅使用最少的资源,因此您可以保留它们。

解决方案:杀死父级或使用kill -9 <pid>

答案 4 :(得分:1)

kill -9 $(pgrep -f keyword)

杀死'KEYWORD'搜索的pid;

答案 5 :(得分:0)

kill $(pgrep [search pattern])

看看它是否更好。您必须是root用户或进程所有者才能终止进程。

答案 6 :(得分:0)

java进程已成为一个僵尸进程。您应该尝试通过SIGCHLDkill信号发送到父进程,以告知父进程收获僵尸子进程。如果不这样,正如@Martin所提到的,你可以杀死父母或kill -9僵尸进程。