$cat t.sh
grep "12" test | wc -c
実行時に作成されるプロセスの数を知りたいです。使用しました
./t.sh;ps -aux | grep "t.sh"
しかし、psが機能しているときに「./t.sh」が実行されたため、機能しませんでした。
どうすればこの目標を達成できますか?
実行しているシステムによって異なります。持っているstrace
場合は、すべてのfork
システムコールを追跡できます。問題は、いくつかのシステムが使用することですがfork
、いくつかvfork
といくつかclone
は、実験する必要があります。Linuxの場合:
strace -c -f -evfork ./t.sh
あなたに要約を与えるべきです。 -c
カウントを与え、-f
子プロセスを「フォロー」することを意味し、カーネル呼び出し-evfork
をトレースすることを意味します。vfork
出力はstderrに送られますが、オプションを使用してファイルにリダイレクトでき-o
ます(ここで名前付きパイプを指定すると、いくつかの巧妙なトリックを実行できます)。
あなたの間違いはセミコロンです。grepを実行する前にt.shが終了するまで待機するようにシェルに指示します。代わりにアンパサンドを使用して、バックグラウンドでt.shを実行するようにシェルに指示します。また、grepの代わりに、pstreeを使用して、次のようにt.shスクリプトによって生成されたプロセスのリストを表示することをお勧めします。
$ ./t.sh & pstree $(pgrep t.sh)
-Eはあなた
./t.sh;ps -aux | grep -E "t.sh"
が必要としているものと正確に一致し、他には何もありません。私は現在Linuxを使用していないので、確信が持てませんが、そのオプションと関係があります。