Простой способ определить, произошел ли сбой (или остановился) процесс? - PullRequest
2 голосов
/ 05 октября 2011

Мне нужно определить, остановился ли процесс (не имеет значения, произошел ли сбой, произошел обычный выход или что-то еще).

Моя установка такая: - задача A - выполняет некоторую обработку (и иногда дает сбой).
- задача B - запускает задачу A и ждет результатов

Моя идея заключается в том, чтобы открыть файл в задаче A в самом начале и использовать inotify в задаче B, чтобы определить, когда задача A открыла и закрыла файл. Когда задача A останавливается (обычно или происходит сбой), файл будет закрыт, и задача B обнаружит это. (при сбое задания A файл будет закрыт, верно?)

Мои вопросы:
- Выше будет работать?
- Есть ли более простой или лучший способ обнаружить остановку задачи А?

PS Если это имеет значение, я использую fedora 9

EDIT Настройка выше очень упрощена. У меня 2 задачи B и около 30 задачи A. Поэтому я не могу использовать system и fork

Ответы [ 3 ]

3 голосов
/ 05 октября 2011

Гораздо проще использовать инструменты мониторинга демонов, такие как runit или watch. Они сделаны на заказ для этой работы, например наблюдая, как контролируемый процесс бежит и умирает. Если вы делаете это самостоятельно, используйте wait и друзей, чтобы дождаться появления процесса.

2 голосов
/ 05 октября 2011

taskB должен использовать fork(), чтобы сделать taskA своим дочерним процессом.Тогда вы можете wait(&status) (в C) ... status будет содержать код завершения задачи A. Вы можете прочитать status, чтобы проверить, завершился ли он нормально или с каким-либо кодом ошибки.

1 голос
/ 05 октября 2011

Вы можете использовать tcp-сокет, то есть установить B в качестве сервера и разрешить A подключаться. B должен периодически записывать байт в A (с любой задержкой, которую вы хотите, прежде чем обнаружите, что A ушел). Когда соединение разрывается (то есть, запись прекращается), вы знаете, что А ушло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...