Вопрос по языку Perl

Svetlana_kafa

Собственно, порождаю процесс-потомок. Он запускает некий бат-файл, после чего потомок убивается (после окончания работы бат-файла) функцией exit. Родительский процесс тем временем выполняет свои функции.
Вопрос! Как в родительском процессе узнать, что потомок больше не существует (закончил работу)?

VitMix



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.

Svetlana_kafa

Немного не понял, в какое место это засунуть. То есть, где должны располагаться команды, которые выполняются родительским процессом, пока потомок живет. И похоже у меня в ХР все это работает как обычный waitpid.
Как я понял еще можно попробовать считывать значение waitpid, и если оно 0, то потомок еще жив.

Svetlana_kafa

Большое спасибо - рюхнул как это работает.

VitMix

Радитель может заниматься своими делами и регулярно вызывать waitpid (если в Windows удастся сделать его неблокирующим а когда свои дела у родителя закончатся он может просто вызвать блокирующий waitpid чтобы подождать завершения потомка. Если нужна настоящая асинхронная реакция на завершение потомка то видимо лучше использовать сигнальный pipe и select, но это уже сложнее...
Оставить комментарий
Имя или ник:
Комментарий: