2014-08-29 141 views
3

作爲標題,我在Linux的sh shell中運行上述命令,但是我只是通過運行「ps -ef | grep dummy」找不到pid 7459的子進程。 有人可以解釋爲什麼這兩個命令之間可能有這樣的區別嗎? 它們是活動進程,而不是LWP(線程),對不對?我怎樣才能顯示線程,順便說一句?爲什麼pstree中顯示的某些進程未在ps -ef中顯示?

sh-3.2$ pstree -p 7459 
dummy(7459)-+-{dummy}(7508) 
      |-{dummy}(7528) 
      |-{dummy}(7529) 
      |-{dummy}(7530) 
      |-{dummy}(7551) 
      |-{dummy}(7552) 
      |-{dummy}(7553) 
      `-{dummy}(7554) 
sh-3.2$ ps -ef | grep dummy 
root  7459 7167 0 Aug28 ?  00:09:13 /usr/bin/dummy 
erv  23720 17254 0 13:22 pts/4 00:00:00 grep dummy 
sh-3.2$ 
+1

這在pstree的文檔(手冊頁)中有介紹。 「進程的子線程可在父進程下找到,並使用花括號中的進程名顯示」,同樣,ps的手冊頁告訴如何顯示線程。 – nos 2014-08-29 11:33:42

回答

4

正如@nos已經表示,pstree默認顯示線程,但ps -ef沒有。

ps可以顯示線程,你只是沒有問它。試試這個(它可能取決於你的版本):

ps -eLf 

這是全部在man page

Linux線程僅僅是與另一個進程共享相同地址空間的進程。這就像一把沒有乾乾淨淨的叉子。您可以在clone syscall documentation中閱讀更多內容。

+0

謝謝,@nos和ams。我認爲你的答案是正確的! 這是我第一次在這裏提出問題,我很高興答案來得如此之快。我會參考你提到的那個手冊頁。 – Zii 2014-08-30 12:57:56

+0

歡迎來到堆棧交換。你的下一步是接受答案。 – ams 2014-08-30 13:34:24

相關問題