スクリプト自体の中から、bashスクリプトの子プロセスの数を見つけるにはどうすればよいですか?
6 に答える
bash スクリプトの PID を取得するには、 variable を使用できます$$。
次に、その子を取得するには、次を実行できます。
bash_pid=$$
children=`ps -eo ppid | grep -w $bash_pid`
ps親 PID のリストを返します。次にgrep、bash スクリプトの子に関連しないすべてのプロセスをフィルタリングします。子供の数を取得するには、次のようにします。
num_children=`echo $children | wc -w`
実際にpsは、bash スクリプトの子でもあるため、得られる数値は 1 ずれます。の実行を子としてカウントしたくない場合は、次のpsように修正できます。
let num_children=num_children-1
更新:の呼び出しを避けるためgrepに、次の構文を使用できます (インストールされているバージョンの でサポートされている場合ps)。
num_children=`ps --no-headers -o pid --ppid=$$ | wc -w`
また、pgrep を使用することもできます。
child_count=$(($(pgrep --parent $$ | wc -l) - 1))
pgrep --parent $$bash プロセスの子のリストを取得するために使用します。
次にwc -l、出力で使用して行数を取得します。$(pgrep --parent $$ | wc -l)
次に、1 を引きます (が空のwc -l場合でも 1 を報告します)。pgrep --parent $$
オプションとともに使用psして--ppid、現在の bash プロセスの子を選択します。
bash_pid=$$
child_count=$(ps -o pid= --ppid $bash_id | wc -l)
let child_count-=1 # If you don't want to count the subshell that computed the answer
ps(注: これにはforの Linux バージョンが必要--ppidです。BSD に相当するものがあるかどうかはわかりpsません。)
次のようなシェル組み込みコマンド ジョブを評価できます。
counter = `jobs | wc -l`