2015-11-10 20 views
-1

今天,當我試圖殺死所有相關泊塢窗過程中,我發現真的很有趣的東西:(Mac OS X)爲什麼這個過程是不可驅動的,它的pid隨時間而變化?

➜ ~ ps aux | grep docker 
Caesar   73944 0.0 0.0 2423372 220 s000 R+ 6:49PM 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn docker 
➜ ~ kill 73944 
kill: kill 73944 failed: no such process 
➜ ~ ps aux | grep docker 
Caesar   74064 0.0 0.0 2432788 572 s000 R+ 6:50PM 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn docker 
➜ ~ 

我用的ps aux | grep docker找到與docker相關的進程,但我不確定它是否真的是docker進程。有趣的是:當我用pid殺死它時,我無法做到這一點,就像你從截圖中看到的那樣。另外,我注意到pid在第二個ps命令中發生了變化。

我知道這個問題可能看起來很愚蠢,但是我在Google上找不到任何東西,因爲我不知道如何描述它。也許你可以幫助我。謝謝 ; )

更新

感謝您對此問題的評論。我注意到,pid屬於grep過程,難怪爲什麼pid每次都有所不同。對不起,創建這樣的垃圾郵件問題。

+0

不同的pid告訴你這是一個不同的過程。當你殺了第一個,父母可能注意到(或其他監視器),並重新啓動它(導致一個新的PID)。 –

+0

**在'ps'輸出處查找**。你正在看到你正在運行的'grep'進程。當管道完成後它就消失了,所以當然你不能殺死它。 –

+0

@johnelemans我再次測試,唯一的區別是我沒有殺死第一個,我假定父進程不重新啓動作業。這是我得到的:➜〜ps aux | grep docker Caesar 98794 ... ➜〜ps aux | grep docker 凱撒98809 ... – harold3sigma

回答

0

您正在看到grep進程,而不是docker進程。無論何時使用grep來篩選ps的輸出,您都會遇到此問題。爲了避免上市grep過程中,典型的解決方案是把方括號的第一個字符在目標進程名稱:

ps aux | grep '[d]ocker' 

由於搜索字符串包含方括號(不有效地改變正則表達式)在grep進程的名稱中找到正則表達式本身時將不再匹配它。

相關問題