Process

使用 ps 更新正在執行的作業的 Bash 列表

  • August 25, 2016

我需要並行執行一組計算密集型任務。我試圖做的是維護與正在執行的作業相對應的 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...

代替

running="$running $pid" 

經過

running="$running,$pid"

在第一種情況下 ps 被呼叫

ps -p 12 34 45 -o pid=

而在第二

ps -p 12,34,45 -o pid=

引用自:https://unix.stackexchange.com/questions/175665