2016-11-06 2 views
0

Во-первых, я заставляю ребенка что-то делать, и использую waitpid(-1, &child_status, WNOHANG); в родительском доме, чтобы позволить родителям продолжить, а не ждать, пока ребенок закончит.Для waitpid, как я узнаю, заканчивает ли ребенок его процесс?

Как узнать, когда ребенок закончил свой процесс?

ответ

2

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

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

int child_exit_flag = 0; 

void child_exit(int sig) 
{ 
    child_exit_flag = 1; 
} 

... 

signal(SIGCHLD, child_exit); 

... 

if (child_exit_flag) { 
    pid_t pid; 
    int status; 

    child_exit_flag = 0; 
    pid = wait(&status); 
    printf("child pid %d exited with status %d\n", pid, status); 
} 
Смежные вопросы