2010-04-23 3 views
1

просто быстрый вопрос относительно C и процессов. В моей программе я создаю еще один дочерний процесс и использую двунаправленный канал для связи между дочерним и родительским. Ребенок вызывает execl() для запуска еще одной программы.Работа с процессами в C

Мой вопрос: Я хочу, чтобы родитель подождал n секунд, а затем проверьте, завершилась ли программа, которую выполнял ребенок (и с каким статусом). Что-то вроде waitpid(), но если ребенок не выйдет через n секунд, я хотел бы сделать что-то другое.

ответ

2

В качестве опции для опроса вы можете использовать waitpid() с WNOHANG или зарегистрировать обработчик сигнала для SIGCHLD.

+0

waitpid() маршрут кажется лучшим. есть ли способ, которым я могу использовать waitpid(), чтобы получить значение выхода последнего дочернего процесса? и я предполагаю, что SIGCHLD выполняет обратный вызов, когда ребенок выходит из системы? – Gary

1

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

signal(SIGALRM,my_dummy_handler); 
    alarm(10); 

    pid_t p = waitpid(...); 
    if(p == -1) { 
    if(errno == EINTR) { 
     //timeout occured 
     } else { 
     //handle other error 
    } 
+0

Кажется, это то, что мне нужно :) Проблема только в том, что если процесс не заканчивается, код после waitpid() никогда не запускается. Как я могу это исправить? – Gary

+0

, или если это не имеет смысла, я хочу вернуть управление процессом в код после waitpid(), чтобы он мог убить функцию нарушения – Gary

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