我想从Perl中的另一个进程启动一个进程的执行,这样两个进程就会异步运行,父进程不应该等待子进程执行完成。
所以我使用管道机制 [open($ fh,' - |',“。/ child.pl”)]从另一个父进程为child.pl派生一个新的子进程我正在使用这个打开的函数创建一个管道。
新分叉的子进程应该继续执行,直到父进程执行。
但我面临的问题是,当孩子使用管道进行分叉时,孩子会开始执行但是在父进程完成执行之前它会过早地停止写入管道句柄。
那么如何防止子进程使用上面提到的管道机制过早停止写入管道句柄,以便子进程在父进程执行的那段时间内继续写入管道句柄?
答案 0 :(得分: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;