Я, безумовно, віддаю перевагу 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 . Використовуйте команду batch для складання завдань.
Наприклад, ви можете щодня складати всі свої завдання. Пакет може бути налаштований, щоб дозволити деякий паралелізм, щоб заблокована робота не зупиняла весь стек (Це залежить від операційної системи).
ЗРІД №2
Створіть фіфо в домашньому каталозі:
$ mkfifo ~/tata
наприкінці вашої роботи:
echo "it's done" > ~/tata
на початку іншої роботи (того, хто чекає):
cat ~/tata
Це не опитування, це старе добре блокування IO.
ЗРІД №3
Використання сигналів:
На початку сценарію, хто чекає:
echo $$ >>~/WeAreStopped
kill -STOP $$
наприкінці вашої довгої роботи:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi