2016-12-01 4 views
1

pcntl_fork를 처음 사용했습니다.PHP pcntl_fork이지만 동기식으로 작동합니다.

<?php 
    for($i = 0; $i < 3 ; $i++){ 
     $pid = pcntl_fork(); 
     if($pid == -1){ 
      echo "error\n"; 
     }elseif($pid == 0){ 
      echo "child(".getmypid().")\n"; 
      sleep(3); 
      exit(); 
     }else{ 
      pcntl_wait($status); 
     } 
    } 
    ?> 

3 프로세스가 동시에 표시하지 않습니다 다음은 내 코드입니다. 두 번째 아이가 첫 번째 아이를 기다리는 것처럼 보입니다. 3 가지 프로세스를 병렬로 작동 시키려면 어떻게해야합니까?

답변

0

제 친구가 질문을 해결했습니다. 이전을 기다리고있는 자식 프로세스는 라인 (11)에 기인한다 :

pcntl_wait($status); 

그것은 이전의 프로세스에 대한 부모의 대기를 발생시키고 첫 번째는 끝이되면 그 다음 과정을 시작합니다.

$pidList = array(); 
for($i = 0; $i < 3 ; $i++){ 
    $pid = pcntl_fork(); 
    if($pid == -1){ 
     echo "error\n"; 
    }elseif($pid == 0){ 
     echo "child(".getmypid().")\n"; 
     sleep(3); 
     exit(); 
    }else{ 
     array_push($pidList, $pid); 
    } 
} 
if($pid != 0){ 
    foreach($pidList as $pid){ 
     pcntl_waitpid($pid, $status); 
    } 
} 
: 여기

올바른 코드
관련 문제