LINUX.ORG.RU

Perl и exec


0

0

Подскажите пожалуйста, почему код вида:

$kid = fork() or die($!)
if($kid)
{
   waitpid($kid,0);
}
else
{
    exec("some_bin");
}

почему в таком варианте, родитель дожидается завершения работы сынка, и продолжает заниматься своими делами, но после сынка остается зомбированный процесс perl. Я считал, что exec подменяет бинарником вызвавший его код и когда заканчивается выполнение, или родитель убивает сынка, то все заканчивается. А так же еще вопрос, а как сделать неблокирующий waitpid? Читал что такое бывает, но вот как именно сделать - не получается.

Никаких зомби при такого вида коде оставаться не должно.

> Я считал, что exec подменяет бинарником вызвавший его код и когда заканчивается выполнение, или родитель убивает сынка, то все заканчивается.

Заканчивается не все :) Запись в таблице процессов остается, пока родитель не попросит exit status, что делается при помощи wait.

stassats ★★★★
()

> А так же еще вопрос, а как сделать неблокирующий waitpid? Читал что такое бывает, но вот как именно сделать - не получается.

perldoc -f waitpid

Там об этом сразу написано.

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