LINUX.ORG.RU

Про wait()


0

0

Вот такая вот конструкция:

if (fork()==0) {
execlp("some_program");
}
wait(0);

приводит иногда к блокировке на wait(),
хотя процесс "some_process" завершился и
стал ЗОМБИ.
Т.е. wait() вешает выполнение, хотя
процесс запущенный по execlp завершился.

Что может быть некорректного в этой конструкции?

anonymous

А напишите по уму:
pid = fork();
switch(pid) {
case 0:
execlp("some_ps");
fprintf(stderr," Can`t execute some_ps\n");
exit(1);
case -1:
perror("Fork Error:");
break;
default:
while(wait(&status)!=pid);
}

А потом будем посмотреть.

vodz ★★★★★
()

Если родитель помирать не должен (т.е. делать ребенка демоном),
то неплохо бы ему перехватить сигнал SIGCHLD.
PS: ну и фраза, блин. Прямо учебник демонологии Ж8-()

anonymous
()

Рекомендую использовать waitpid() вместо wait() - поудобнее будет.

Bauron
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.