2016-01-23 89 views
1

如果我运行它:在PHP5PHP7 Bugs pcntl_signal(SIGCHLD,SIG_IGN);如何杀死僵尸?

<?php 
    declare(ticks = 1); 
    for($i=0;$i<300;$i++){ 
      $pid = pcntl_fork(); 
       if ($pid == -1) { 
        die('could not fork'); 
       } else if ($pid) { 
         usleep(2500); 

       } else { 
         echo 'Child'.$i."\r\n"; 
         sleep(mt_rand(1,3)); 

         exit; 
       } 

    } 
    echo 'Test123'; 
    pcntl_signal(SIGCHLD, SIG_IGN); 
    sleep(60) 
    echo 'Test456'; 
?> 

。我看到多个ChildTest123,60秒后,我看到。

但是!在PHP7上,我看到多个ChildTest123而不是 - 睡眠不起作用。我看到pcntl_signal(SIGCHLD, SIG_IGN);不会帮助杀死僵尸!它不起作用。

我能做什么?

+0

不知道这是否可行,但'declare(ticks = 1);'也许应该''declare(ticks = 1);'。 – Will

回答

1
$p = pcntl_waitpid(-1,$status,WNOHANG); 

没有处理程序。在创建后的父级。

0

好:)我瑶池回答:)

declare(ticks = 1); 

- 对脚本顶部

,其功能是全球:

function signal_handler($signal) { 
     switch($signal) { 
      case SIGCHLD: 
       while (pcntl_waitpid(0, $status) != -1) { 
        $status = pcntl_wexitstatus($status); 
        echo "Child $status completed\n"; 
       } 

       exit; 
     } 
    } 

这在父母后叉

pcntl_signal(SIGCHLD, "signal_handler");  
+0

oh no(它不工作,如果一个进程死了 - 脚本是不能工作的属性:( –