Вопрос по языку Perl
waitpid PID,FLAGS
Waits for a particular child process to terminate and returns
the pid of the deceased process, or -1 if there is no such
child process. On some systems, a value of 0 indicates that
there are processes still running. The status is returned in
$?. If you say
use POSIX ":sys_wait_h";
#...
do {
$kid = waitpid(-1,&WNOHANG);
} until $kid == -1;
then you can do a non-blocking wait for all pending zombie
processes. Non-blocking wait is available on machines
supporting either the waitpid(2) or wait4(2) system calls.
However, waiting for a particular pid with FLAGS of 0 is
implemented everywhere. (Perl emulates the system call by
remembering the status values of processes that have exited but
have not been harvested by the Perl script yet.)
Note that on some systems, a return value of -1 could mean that
child processes are being automatically reaped. See the
perlipc manpage for details, and for other examples.
Как я понял еще можно попробовать считывать значение waitpid, и если оно 0, то потомок еще жив.
Большое спасибо - рюхнул как это работает.
Радитель может заниматься своими делами и регулярно вызывать waitpid (если в Windows удастся сделать его неблокирующим а когда свои дела у родителя закончатся он может просто вызвать блокирующий waitpid чтобы подождать завершения потомка. Если нужна настоящая асинхронная реакция на завершение потомка то видимо лучше использовать сигнальный pipe и select, но это уже сложнее...
Оставить комментарий
Svetlana_kafa
Собственно, порождаю процесс-потомок. Он запускает некий бат-файл, после чего потомок убивается (после окончания работы бат-файла) функцией exit. Родительский процесс тем временем выполняет свои функции.Вопрос! Как в родительском процессе узнать, что потомок больше не существует (закончил работу)?