Как узнать, когда процесс завершается в Linux? - PullRequest
8 голосов
/ 09 сентября 2010

Я не могу найти хороший способ узнать, когда процесс завершается в Linux. У кого-нибудь есть решение для этого?

Одна вещь, о которой я могу подумать, это периодически проверять список процессов, но это не мгновенно и довольно дорого (приходится каждый раз проходить все процессы).

Есть ли интерфейс для этого в Linux? Что-то вроде waitpid, кроме того, что можно использовать из несвязанных процессов?

Спасибо, Бода Cydo

Ответы [ 4 ]

4 голосов
/ 09 сентября 2010

Вы не можете ждать несвязанного процесса, только детей.

Более простой метод опроса, чем проверка списка процессов, если у вас есть разрешение, вы можете использовать системный вызов kill(2) и сигнал "отправить" 0.

На справочной странице kill(2):

Если sig равен 0, сигнал не отправляется, но проверка ошибок по-прежнему выполняется;это можно использовать для проверки существования идентификатора процесса или идентификатора группы процессов

2 голосов
/ 09 сентября 2010

Другой вариант - открыть процессу объект IPC, такой как сокет домена unix;ваш сторожевой процесс может определить, когда процесс завершится, поскольку он будет немедленно закрыт.

2 голосов
/ 09 сентября 2010

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

Рассмотрим очень простой пример:

sleep 10; echo "finished"

sleep 10 - это первый процесс, echo "finished" - второй (хотя echo обычно является плагином оболочки, но я надеюсь, что вы поняли)

1 голос
/ 09 сентября 2010

Если вам известен PID рассматриваемого процесса, вы можете проверить, существует ли / proc / $ PID. Это относительно дешевый stat() звонок.

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