スクリプトによって生成されたサブプロセスの総数を(再帰的に)見つける方法は?
分析目的のために、時にはコマンド、スクリプトなどによって生成されたサブプロセスを計算することが重要です。
私は何を試みたか。
ps
ソリューションに基づいていますが、現在実行中のプロセスのみが表示されます。- 使用次のpid番号(これが私の最善の解決策です)
例:
ps | awk '/ ps$/{print $1}'
27159
$ for a in {1..100} ; do date > /dev/null; done ## 100 processes
$ ps | awk '/ ps$/{print $1-2}'
27259
(27259-27159=100)しかし、これ次のpid番号他のことによってリセットされ、注意が気を散らします。
答え1
> strace -c -f -e trace=fork,vfork,clone,execve,execl bash -c 'ls -ld /etc;sleep 1'
Process 15683 attached
drwxr-xr-x 1 root root 5540 10. Jan 02:08 /etc
Process 15684 attached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 2 clone
0.00 0.000000 0 3 execve
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 5 total
> strace -c -f -e trace=fork,clone,execve bash -c '(foo=bar;ls -ld /etc);sleep 1'
Process 15730 attached
Process 15731 attached
drwxr-xr-x 1 root root 5540 10. Jan 02:08 /etc
Process 15732 attached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 3 clone
0.00 0.000000 0 3 execve
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 6 total