在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命令显示了java进程与pid 7342。

我应该使用一些其他的命令杀死进程,为什么kill不能杀死进程

感谢名单

Linux支持BSD风格切换到ps命令(没有前导 – 连字符/连字符)。 如果提供了这些知识,那么GNU coreutils版本的ps (主流Linux发行版上的标准版本)将尝试将这些开关解释为与SysV兼容。 这是你的错误的来源。

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

你也试图杀死一个僵尸。 正如你发现那是徒劳的。 一个僵尸是一个占位符,在一个已经死亡的进程能够进行。 它保留在进程表中,直到其父进程“收回”其退出代码。 如果父进程不会执行wait()系统调用,那么这个入口将一直存在,直到父进程被终止后,僵尸(以及任何其他孤儿进程)将被init进程继承。 Linux(或任何其他形式的UNIX)下的普通init定期收集所有死进程(僵尸)。

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

这个问题真的应该在serverFault上

尝试

ps aux

然后

kill -1 PID_NUMBER

要求程序自行关闭,如果不回答就可以强制关闭

kill -9 PID_NUMBER

请记住,使用-9强制程序将最终确定没有问,也不保存任何检查:男子杀死更多的细节

杀死-9可以作为最后的手段,以确保过程中死亡…..

该进程被列为已停用。 它的工作已经完成了,因为父进程还在那里。 但是,如果父系崩溃或被kill -9杀死,则不存在父进程,因此停止执行进程将保留,直到重新启动。 僵尸(或僵尸)进程只使用最少的资源,所以你可以保留它们。

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

 kill $(pgrep [search pattern]) 

看看这是否更好。 您必须是root或进程所有者才能杀死一个进程。

java进程已经成为一个僵尸进程。 您应该尝试通过kill向父进程发送SIGCHLD信号,告诉父进程收获僵尸子进程。 如果失败了,就像@Martin提到的那样,你可以杀死父母或kill -9僵尸进程。

kill -9 $(pgrep -f keyword)

杀死由'KEYWORD'搜索的pid(s);