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=

相关内容