Why won’t the parent process be suspended when
sum =2?
$sum = 0;
<code> while(true){ $sum++; $pid= pcntl_fork(); switch($pid){ case "-1": echo"couldn't fork"; break; case "0":{ var_dump(getmypid()); var_dump(pcntl_wifexited($status), pcntl_wifstopped($status), pcntl_wifsignaled($status), pcntl_wexitstatus($status), pcntl_wtermsig($status)); echo 'ppppppppp'; </code>
<code> exit(0); } default: { if($sum == 2){ // $subPid = pcntl_waitpid(-1, $status, SI_ASYNCIO); $subPid = pcntl_wait($status); echo '挂起'."\n"; } var_dump('主'.getmypid()); var_dump($subPid); echo "I'm child" . getmypid() . "\n"; echo 'ccp'; //就会执行子进程 sleep(30); echo "\n\n\n"; } // exit(0); } var_dump(getmypid()); echo 'iiiiiii'; if($sum == 2) break; } 这个是答案 string(8) "主26003"</code>
I'm child26003
ccpint(26004)
bool(true)
bool(false)
bool(false)
int(0)
int(0)
pppppppppp
iiiiiii hangs
string(8) "main 26003"
int(26004)
I'm child26003
ccpint(26005)
bool(true)
bool(false)
bool(false)
int (0)
int(0)
ppppppppp
iiiiiii
$sum = 0;
<code> while(true){ $sum++; $pid= pcntl_fork(); switch($pid){ case "-1": echo"couldn't fork"; break; case "0":{ var_dump(getmypid()); var_dump(pcntl_wifexited($status), pcntl_wifstopped($status), pcntl_wifsignaled($status), pcntl_wexitstatus($status), pcntl_wtermsig($status)); echo 'ppppppppp'; </code>
<code> exit(0); } default: { if($sum == 2){ // $subPid = pcntl_waitpid(-1, $status, SI_ASYNCIO); $subPid = pcntl_wait($status); echo '挂起'."\n"; } var_dump('主'.getmypid()); var_dump($subPid); echo "I'm child" . getmypid() . "\n"; echo 'ccp'; //就会执行子进程 sleep(30); echo "\n\n\n"; } // exit(0); } var_dump(getmypid()); echo 'iiiiiii'; if($sum == 2) break; } 这个是答案 string(8) "主26003"</code>
NULL
I'm child26003ccpint(26004)
bool(true)
bool(false)
bool(false)
int(0)
int(0)
pppppppppp
int(26003)
string(8) "main 26003"
int(26004)
I'm child26003
ccpint(26005)
bool(true)
bool(false)
bool(false)
int (0)
int(0)
ppppppppp
int(26003)