2010-09-09 6 views
7

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

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

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

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

+1

Напишите программу C, что fork() s и exec() s? –

+0

Хорошее предложение Дейв. Я собираюсь сделать это именно так. – bodacydo

ответ

2

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

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

sleep 10; echo "finished" 

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

1

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

+1

Это не работает. Может быть состояние гонки. – bodacydo

+0

Согласовано на состояние гонки. Pids перерабатываются, поэтому, используя эту технику самостоятельно, нет никакой гарантии, что процесс, выполняющийся под этим pid, является исходным процессом. –

4

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

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

На странице kill(2) людей:

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

2

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

Смежные вопросы