1

我想在 Perl 中从另一个进程启动一个进程的执行,这样两个进程异步运行,父进程不应等待子进程执行完成。

所以我使用管道机制[ open($fh, '-|', "./child.pl") ] 为 child.pl 从另一个父进程派生一个新的子进程,我正在使用这个 open 函数创建一个管道。

新分叉的子进程应该继续执行,直到父进程执行。

但是我面临的问题是,子进程在使用管道分叉时开始执行,但是在父进程完成执行之前它过早地停止写入管道句柄。

那么如何防止子进程使用上述管道机制过早停止写入管道句柄,以便子进程在父进程执行的那段时间内继续写入管道句柄?

4

1 回答 1

1

您可以使用 IPC::Open3 来执行此操作:

 my($wtr, $rdr, $err);
 use Symbol 'gensym'; $err = gensym;
 my $pid = open3($wtr, $rdr, $err,'some cmd and args', 'optarg', ...);
 ### Do something in the main prg
 waitpid( $pid, 0 );#when you no longer needs the child
 my $child_exit_status = $? >> 8;
于 2013-07-11T13:15:30.190 回答