Я определенно предпочитаю решение EDIT # 3 (см. Ниже).
если его не в той же оболочке использовать то время как цикл с условием на пс -p возвращает истину. Включите режим сна, чтобы уменьшить нагрузку на процессор.
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
или если ваш UNIX поддерживает / proc (например, HP-UX все еще не поддерживает).
while [[ -d /proc/<pid> ]]
do
sleep 10
done
Если вы хотите тайм-аут
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
РЕДАКТИРОВАТЬ # 1
Есть другой способ: не используйте cron . Используйте пакетную команду, чтобы сложить ваши задания.
Например, вы можете ежедневно складывать все свои работы. Пакет может быть настроен для обеспечения некоторого параллелизма, поэтому заблокированное задание не остановит весь стек (это зависит от операционной системы).
РЕДАКТИРОВАТЬ № 2
Создайте fifo в вашем домашнем каталоге:
$ mkfifo ~/tata
в конце вашей работы:
echo "it's done" > ~/tata
в начале другой работы (тот, кто ждет):
cat ~/tata
Это не опрос, это старая хорошая блокировка ввода-вывода.
РЕДАКТИРОВАТЬ № 3
Используя сигналы:
В начале сценария (ов) кто (а) ждет:
echo $$ >>~/WeAreStopped
kill -STOP $$
в конце вашей долгой работы:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi