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

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

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

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

我怎样才能达到这个目标?

4

3 回答 3

1

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

$ ./t.sh & pstree $(pgrep t.sh)
于 2012-06-25T14:13:09.973 回答
1

取决于您正在运行的系统。如果有strace,您可以跟踪所有fork系统调用。问题是尽管某些系统使用fork,一些vfork和一些clone,您将不得不进行实验。在 Linux 上:

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

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

于 2012-06-25T13:52:25.733 回答
0

您可以尝试
./t.sh;ps -aux | grep -E "t.sh" -E 完全匹配您需要的内容,仅此而已,我现在不在 linux 上,所以我不能确定,但​​是与该选项有关

于 2012-06-25T14:06:16.993 回答