1

親プロセスが子プロセスの実行の完了を待たないように、2 つのプロセスが非同期に実行されるように、Perl の別のプロセスから 1 つのプロセスの実行を開始したいと考えています。

だから私はパイプメカニズム[ open($fh, '-|', "./child.pl") ]を使用して、このopen関数を使用して作成している別の親プロセスからchild.plの新しい子プロセスをフォークしていましたパイプ。

新しくフォークされた子プロセスは、親プロセスが実行されるまで実行を継続する必要があります。

しかし、私が直面している問題は、パイプを使用してフォークされたときに子が実行を開始するが、親プロセスが実行を終了する前にパイプハンドルへの書き込みを途中で停止することです。

では、上記のパイプメカニズムを使用して子プロセスによるパイプハンドルへの書き込みが早期に停止するのを防ぐにはどうすればよいのでしょうか?

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 に答える