Je préfère définitivement la solution EDIT # 3 (voir ci-dessous).
si son pas dans la même coquille utiliser un en boucle avec condition sur ps -p retour vrai. Mettez un sommeil dans la boucle pour réduire l'utilisation du processeur.
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
ou si votre UNIX prend en charge / proc (par exemple, HP-UX ne le fait toujours pas).
while [[ -d /proc/<pid> ]]
do
sleep 10
done
Si vous voulez un timeout
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
EDIT # 1
Il y a une autre manière: n'utilisez pas cron . Utilisez la commande batch pour empiler vos travaux.
Par exemple, vous pouvez empiler quotidiennement tous vos travaux. Le lot peut être réglé pour permettre un certain parallélisme afin qu'un travail bloqué n'arrête pas la totalité de la pile (cela dépend du système d'exploitation).
EDIT # 2
Créez un fifo dans votre répertoire personnel:
$ mkfifo ~/tata
à la fin de votre travail:
echo "it's done" > ~/tata
au début de l'autre travail (celui qui attend):
cat ~/tata
Ce n'est pas du polling, c'est du bon vieux IO de blocage.
EDIT # 3
Utilisation de signaux:
Au début du ou des scripts qui attendent:
echo $$ >>~/WeAreStopped
kill -STOP $$
à la fin de votre long travail:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi