
一連の計算集約的なタスクを並列に実行する必要があります。私がやろうとしているのは、実行中のジョブに対応するpidのリストを維持し、実行中のジョブのリストを更新することですが、ps
コマンド拡張に問題があります。
デフォルトでは、実行中のジョブのリストがあり、使用したいと思いますps
。リストは、スペースで区切られた整数(pid)文字列として保存されます。私がしたいことの例は次のとおりです。
sleep 10 &
pid=$!
running="$running $pid"
sleep 20 &
pid=$!
running="$running $pid"
sleep 30 &
pid=$!
running="$running $pid"
sleep 40 &
pid=$!
running="$running $pid"
echo "Initial list of jobs"
echo "$running"
sleep 20
echo "Jobs still running after 20 seconds"
echo $(ps -p $running -o pid= | tr -s "\n" " ")
しかし、私が得るもの
Initial list of jobs
30815 30816 30817 30818
Jobs still running after 20 seconds
error: process ID list syntax error
... bla bla bla ps usage...
答え1
変える
running="$running $pid"
渡す
running="$running,$pid"
最初のケースでは、psが呼び出されます。
ps -p 12 34 45 -o pid=
そして第二に
ps -p 12,34,45 -o pid=