Lista de atualização de Bash de tarefas em execução com ps

2

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...
    
por Net_Raider 23.12.2014 / 20:00

1 resposta

4

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=
    
por 23.12.2014 / 20:33