Я пишу сценарий оболочки для использования в inittab. Этот скрипт запускает демона и ждет его завершения.Ждите последнего созданного процесса (daemon, который вилки) до конца
Вот что я в настоящее время:
#!/bin/bash
/usr/local/bin/mydaemon --lots_of_params_here
while kill -0 `echo $!` 2> /dev/null; do sleep 1; done;
Проблема заключается во второй строке; он сразу возвращается. Если я вместо этого сделать:
while kill -0 `pgrep mydaemon` 2> /dev/null; do sleep 1; done;
Это все работает нормально, но это не является хорошим решением для меня, как у меня есть другие сценарии с префиксом mydaemon
.
Что я делаю неправильно?
EDIT:
Проблема, как представляется, связана с демоном вилкой(). Итак, я всегда получаю родительский pid в $!
. Я ищу способы решить эту проблему. Может быть, я должен использовать файлы pid и есть mydaemon
напишите его pid.
Можете ли вы сделать своего демона не вилкой? Если вам все равно понадобится этот скрипт, работающий во время запуска вашего демона, просто запустите демон в фоновом режиме с помощью оператора «&» в сценарии оболочки и не создавайте вилку демона. (В этом случае вы также можете использовать командную оболочку «wait» вместо того, чтобы цитировать опрос демона, который все еще находится вокруг. – nos
Я никогда не думал об этом. Но это не двойная стандартная практика практики демона (чтобы убедиться, что демон запущен успешно и отсоединиться от терминала)? – Zaxter
Возможно, но ваше требование - не отсоединяться от терминала, а использовать демон в фоновом режиме в сценарии, - так вот что должен делать ваш демон. Если вам нужны обе возможности, ваш daemon возьмет параметр командной строки, который сообщает об этом в fork (или нет). – nos