2016-01-23 98 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(它不工作,如果一個進程死了 - 腳本是不能工作的屬性:( –