Bashはpsを使用して実行中のジョブのリストを更新します。

Bashはpsを使用して実行中のジョブのリストを更新します。

一連の計算集約的なタスクを並列に実行する必要があります。私がやろうとしているのは、実行中のジョブに対応する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=

おすすめ記事