2010-06-29 146 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';