如何获取shell脚本的所有进程名称?

时间:2012-06-25 13:22:32

标签: linux bash shell

$cat t.sh  
grep "12" test | wc -c  

我想知道运行时会创建多少个进程。 我用了

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

但它没有用,因为“./t.sh”在ps工作时已经运行了。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

取决于您正在运行的系统。如果您有strace,则可以跟踪所有fork系统调用。问题是虽然有些系统使用fork,有些vfork和有些clone,但您必须进行实验。在linux上:

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

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

答案 1 :(得分:1)

你的错误是分号。它告诉shell等到t.sh完成后再运行grep。使用&符号来告诉shell在后台运行t.sh.除了grep之外,你最好还是使用pstree来查看t.sh脚本生成的进程列表,如下所示:

$ ./t.sh & pstree $(pgrep t.sh)

答案 2 :(得分:0)

你可以试试       ./t.sh;ps -aux | grep -E "t.sh" -E完全匹配你需要的东西,没有别的,我现在不在linux上,所以我不能确定,但​​这与该选项有关