コマンドによって生成された子プロセスの総数を(再帰的に)計算します。

コマンドによって生成された子プロセスの総数を(再帰的に)計算します。

スクリプトによって生成されたサブプロセスの総数を(再帰的に)見つける方法は?

分析目的のために、時にはコマンド、スクリプトなどによって生成されたサブプロセスを計算することが重要です。

私は何を試みたか。

  • 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

関連情報