PHPの子プロセスとシグナル部分2
pcntl_wait()
, それはうまく処理されるuntilsのままです.(一旦処理されると、後では動作しないでしょう.pcntl_wait()
) pcntl_async_signals(true);
pcntl_signal(SIGTERM, function ($signal, $status) {
echo "inside pcntl_signal\n";
$pid = pcntl_wait($processStatus, WUNTRACED);
// $pid = pcntl_wait($processStatus, WNOHANG);
if (pcntl_wifexited($processStatus)) {
$code = pcntl_wexitstatus($processStatus);
print "pid $pid returned exit code: $code\n ";
} else {
print "$pid was unnaturally terminated\n ";
}
// print_r($processStatus);
// echo "\n";
// echo "signal: $signal\n";
// print_r($status);
});
if ($pid = pcntl_fork()) {
$parent = getmypid();
echo "parent: $parent\n";
sleep(60);
} else {
$childPid = getmypid();
echo "child pid: $childPid\n";
sleep(60);
}
上記のスクリプトを実行し、プロセスPIDの出力に従って、最初の使用kill
親プロセスをkillし、子プロセスをkillするコマンド.出力は以下のようになります:parent: <parent pid>
child pid: <child pid>
inside pcntl_signal
pid -1 returned exit code: 0
inside pcntl_signal
pid <child pid> returned exit code: 0
我々はまだ2つのプロセス、1つの親、1つの子を作成します.子プロセスをkillし、子プロセスのシグナルハンドラを呼び出す.しかしpcntl_wait()
親プロセスで呼び出されたときのみ動作するので、- 1を返す.そして、私たちは、この時、親を殺しますpcntl_wait()
親プロセスで子プロセスのステータス情報を正常に処理します.しかし、これは注目すべき点を発生させます.pcntl_wait()
子プロセスで親プロセスが正常に終了するまで待機します.Reference
この問題について(PHPの子プロセスとシグナル部分2), 我々は、より多くの情報をここで見つけました https://dev.to/aldora713/php-child-process-and-signal-part-2-m8bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol