2010-06-29 145 views
3
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。在linux中杀死一个进程

然后我用kill命令杀死了那个进程。 但是,这并不是因为杀死再ps命令显示了PID 7342.

我应该使用一些其他命令杀掉该进程java程序和为什么要杀是不能杀的过程

感谢名单

+3

属于superuser.com – 2010-06-29 11:25:35

+0

问题不是关于一般编程,而是关于系统。尝试superuser.com – Piran 2017-07-26 09:48:03

回答

5

Linux支持将BSD样式切换到ps命令(不带前导符号 - 短划线/连字符)。如果您提供了这些知识,那么GNU coreutils版本ps(这是主流Linux发行版的标准版本)将尝试将交换机解释为SysV兼容。这是你的错误的来源。

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

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

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

这个问题确实应该去ServerFault

+1

另外:通过运行'ps auxf',你会看到父进程是什么。它也可能被阻挡,或者没有注意到它的孩子。 – vdboor 2010-06-29 11:46:19

0
kill $(pgrep [search pattern]) 

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

5

尝试

的ps aux

然后

杀-1 PID_NUMBER

问计划,以弥补自身,如果不到风度回答,您可以强行关闭

kill -9 PID_NUMBER

记住usi NG -9强制程序将最终确定不问,不保存任何 检查:男子杀死 更多细节

+0

请记住,杀死-9应该是你的最后手段,因为它不会让你被杀死的进程的子进程死亡。所以他们成为僵尸进程。 – 2010-06-29 11:37:41

4

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

1

的过程被列为解散。它的工作已经完成,并且由于父进程仍然存在而一直存在。但是,如果父系崩溃或被kill -9杀死,则没有父进程,因此停止执行的进程将保留,直到重新启动。 不活动(或僵尸)进程只使用最少的资源,所以你可以保留它们。

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

+0

或者,如果您感到沮丧,请致电Kill ' – James 2010-06-29 11:51:46

+0

Thanx。 kill -9 不起作用。 你能告诉命令找到父进程。 – sjain 2010-06-29 12:12:02

0

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

1

kill -9 $(pgrep -f keyword)

Kill pid(s)搜索'KEYWORD';