2014-08-29 147 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

相关问题