2012-06-25 29 views
0
$cat t.sh 
grep "12" test | wc -c 

我想知道运行时将创建多少个进程。 我用如何获取shell脚本的所有进程名称?

./t.sh;ps -aux | grep "t.sh"  

,但它没有工作,因为“./t.sh”已经跑过来时,PS是工作。

我该如何达到这个目标?

回答

1

取决于您正在运行的系统。如果您有strace,则可以跟踪所有的fork系统调用。问题是虽然有些系统使用fork,一些vfork和一些clone,你将不得不尝试。在linux上:

strace -c -f -evfork ./t.sh 

应该给你一个总结。 -c给出计数,-f表示“跟踪”子进程,而-evfork表示跟踪vfork内核调用。输出到stderr,但您可以使用-o选项将其重定向到一个文件(如果您在此处指定命名管道,则可以使用一些简洁的技巧)。

0

你可以尝试
./t.sh;ps -aux | grep -E "t.sh" -E比赛正是你需要的,没有别的,我不是在Linux所以我现在不能肯定,但有些事做这种选择

+0

'-E'选项'grep'方式使用扩展的正则表达式,而比基本的正则表达式。 'grep -E'与'egrep'等效(在Linux上完全一样)。 – cdarke

1

你的错误是分号。它告诉shell等待t.sh完成后再运行grep。使用&符号来告诉shell在后台运行t.sh。此外,而不是grep的你会更好使用pstree看你t.sh这样的脚本生成的进程列表:

$ ./t.sh & pstree $(pgrep t.sh) 
相关问题