substituir
running="$running $pid"
por
running="$running,$pid"
No primeiro caso, o ps é chamado com
ps -p 12 34 45 -o pid=
enquanto no segundo
ps -p 12,34,45 -o pid=
Eu preciso executar em paralelo um conjunto de tarefas computacionalmente intensivas. O que eu estava tentando fazer é manter uma lista de pids correspondentes às tarefas em execução e atualizar a lista de tarefas em execução com ps
, mas estou tendo problemas com a expansão do comando.
Basicamente, tenho uma lista de tarefas em execução e quero atualizar com ps
. Essa lista é salva como uma string de inteiros (os pids) separados por espaços. O seguinte é um exemplo do que eu quero fazer
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" " ")
mas tudo que eu obtenho é
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...