Definitivamente, prefiro a solução EDIT # 3 (veja abaixo).
se não no mesmo shell usar um enquanto loop com condição em ps -p retornando true. Coloque um sono no circuito para reduzir o uso do processador.
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
ou se o seu UNIX estiver suportando / proc (por exemplo, o HP-UX ainda não possui).
while [[ -d /proc/<pid> ]]
do
sleep 10
done
Se você quer um tempo limite
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
EDIT # 1
Existe uma outra maneira: não use cron . Use o comando batch para empilhar seus trabalhos.
Por exemplo, você pode diariamente empilhar todos os seus trabalhos. O lote pode ser ajustado para permitir algum paralelismo, para que um trabalho bloqueado não pare toda a pilha (depende do sistema operacional).
EDIT # 2
Crie um fifo no seu diretório pessoal:
$ mkfifo ~/tata
no final do seu trabalho:
echo "it's done" > ~/tata
no início do outro trabalho (aquele que está esperando):
cat ~/tata
Não está pesquisando, é bom IO de bloqueio antigo.
EDIT # 3
Usando sinais:
No início do script, quem está esperando:
echo $$ >>~/WeAreStopped
kill -STOP $$
no final do seu longo trabalho:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi