$cat t.sh
grep "12" test | wc -c
我想知道它运行时会创建多少个进程。我用了
./t.sh;ps -aux | grep "t.sh"
但它不起作用,因为“./t.sh”在 ps 工作时已经运行。
我怎样才能达到这个目标?
你的错误是分号。它告诉 shell 在运行 grep 之前等到 t.sh 完成。使用 & 号来告诉 shell 在后台运行 t.sh。此外,您最好不要使用 grep 来查看由 t.sh 脚本生成的进程列表,如下所示:
$ ./t.sh & pstree $(pgrep t.sh)
取决于您正在运行的系统。如果有strace
,您可以跟踪所有fork
系统调用。问题是尽管某些系统使用fork
,一些vfork
和一些clone
,您将不得不进行实验。在 Linux 上:
strace -c -f -evfork ./t.sh
应该给你一个总结。 -c
给出一个计数,-f
表示“跟随”子进程,并-evfork
表示跟踪vfork
内核调用。输出到 stderr,但您可以使用-o
选项将其重定向到文件(如果您在此处指定命名管道,您可以执行一些巧妙的技巧)。
您可以尝试
./t.sh;ps -aux | grep -E "t.sh"
-E 完全匹配您需要的内容,仅此而已,我现在不在 linux 上,所以我不能确定,但是与该选项有关