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无法终止进程
感谢名单
答案 0 :(得分:6)
试
然后
要求程序自行关闭,如果它没有回答你可以强行关闭
请记住,使用-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进程已成为一个僵尸进程。您应该尝试通过SIGCHLD
将kill
信号发送到父进程,以告知父进程收获僵尸子进程。如果不这样,正如@Martin所提到的,你可以杀死父母或kill -9
僵尸进程。