いくつかのサブプロセスを生成するが一度に複数回生成しないPythonスクリプトがありますn
。
与えられた時間に子プロセス以上がなく、通常はn
プロセスn
が実行されていることを確認するためにシェルスクリプトを作成したいと思います。
シェルスクリプトにPythonプログラムのPIDがある場合、そのPIDが現在所有しているサブプロセスの数をどのように確認できますか?例えば
python script.py &
pid=$!
while true
do
# do something that prints number of subprocesses of
# the process $pid to stdout
sleep 1
done
答え1
ps -eo ppid= | grep -Fwc $pid
grep
サポートしていない場合-w
:
ps -eo ppid= | tr -d '[:blank:]' | grep -Fxc $pid
または
ps -eo ppid= | awk '$1==ppid {++i} END {print i+0}' ppid=$pid
または(位置パラメータの中断)
set $(ps -eo ppid=); echo $#
これはアトミックではないため、データの収集に要する短時間で一部のプロセスが終了し、他のプロセスが作成された場合はカウントが正しくない可能性があります。
答え2
努力するps --ppid ${pid} --no-headers | wc --lines
。
答え3
もしpgrep
有効、-P
親pid[]でフィルタリングされます。
sproc_pids=( $(pgrep -P $pid) ) && echo ${#sproc_pids[@]}