0
$cat t.sh  
grep "12" test | wc -c  

実行時に作成されるプロセスの数を知りたいです。使用しました

./t.sh;ps -aux | grep "t.sh"    

しかし、psが機能しているときに「./t.sh」が実行されたため、機能しませんでした。

どうすればこの目標を達成できますか?

4

3 に答える 3

1

実行しているシステムによって異なります。持っているstrace場合は、すべてのforkシステムコールを追跡できます。問題は、いくつかのシステムが使用することですがfork、いくつかvforkといくつかcloneは、実験する必要があります。Linuxの場合:

strace -c -f -evfork ./t.sh

あなたに要約を与えるべきです。 -cカウントを与え、-f子プロセスを「フォロー」することを意味し、カーネル呼び出し-evforkをトレースすることを意味します。vfork出力はstderrに送られますが、オプションを使用してファイルにリダイレクトでき-oます(ここで名前付きパイプを指定すると、いくつかの巧妙なトリックを実行できます)。

于 2012-06-25T13:52:25.733 に答える
1

あなたの間違いはセミコロンです。grepを実行する前にt.shが終了するまで待機するようにシェルに指示します。代わりにアンパサンドを使用して、バックグラウンドでt.shを実行するようにシェルに指示します。また、grepの代わりに、pstreeを使用して、次のようにt.shスクリプトによって生成されたプロセスのリストを表示することをお勧めします。

$ ./t.sh & pstree $(pgrep t.sh)
于 2012-06-25T14:13:09.973 に答える
0

-Eはあなた
./t.sh;ps -aux | grep -E "t.sh" が必要としているものと正確に一致し、他には何もありません。私は現在Linuxを使用していないので、確信が持てませんが、そのオプションと関係があります。

于 2012-06-25T14:06:16.993 に答える