$cat t.sh
grep "12" test | wc -c
我想知道运行时将创建多少个进程。 我用如何获取shell脚本的所有进程名称?
./t.sh;ps -aux | grep "t.sh"
,但它没有工作,因为“./t.sh”已经跑过来时,PS是工作。
我该如何达到这个目标?
$cat t.sh
grep "12" test | wc -c
我想知道运行时将创建多少个进程。 我用如何获取shell脚本的所有进程名称?
./t.sh;ps -aux | grep "t.sh"
,但它没有工作,因为“./t.sh”已经跑过来时,PS是工作。
我该如何达到这个目标?
取决于您正在运行的系统。如果您有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所以我现在不能肯定,但有些事做这种选择
你的错误是分号。它告诉shell等待t.sh完成后再运行grep。使用&符号来告诉shell在后台运行t.sh。此外,而不是grep的你会更好使用pstree看你t.sh这样的脚本生成的进程列表:
$ ./t.sh & pstree $(pgrep t.sh)
'-E'选项'grep'方式使用扩展的正则表达式,而比基本的正则表达式。 'grep -E'与'egrep'等效(在Linux上完全一样)。 – cdarke