スクリプト自体の中から、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`