Tôi có một số mã như thế này, và tôi muốn hiểu cách hoạt động của fork, nhưng tôi bị nhầm lẫn với declare(ticks=1)
. khi tôi đặt nó vào dòng đầu tiên, sau khi quá trình con hoàn tất, trình xử lý tín hiệu sẽ được gọi, đó là điều tôi muốn; nhưng khi tôi tháo nó ra, bộ xử lý tín hiệu sẽ không bao giờ được gọi! Vì vậy, tôi muốn biết làm thế nào để các ve ảnh hưởng đến việc xử lý tín hiệu.Quan hệ giữa khai báo (tick) và xử lý tín hiệu trong php
<?php
declare(ticks=1);
function sigHandler($signal)
{
echo "a child exited\n";
}
pcntl_signal(SIGCHLD, sigHandler, false);
echo "this is " . posix_getpid() . PHP_EOL;
for($i=0; $i<3; $i++)
{
$pid = pcntl_fork();
if($pid == -1)
{
echo 'fork failed ' . PHP_EOL;
}
else if($pid)
{
}
else
{
$pid = posix_getpid();
echo 'child ' . $pid . ' ' . time() . PHP_EOL;
sleep(rand(2,5));
echo 'child ' . $pid . ' done ' . time() . PHP_EOL;
exit(0);
}
}
do
{
$pid = pcntl_wait($status);
echo 'child quit ' . $pid . PHP_EOL;
}while($pid > 0);
echo 'parent done' . PHP_EOL;
?>
cảm ơn câu trả lời của bạn – zhaozhi