|
pcntl_waitpid
Waits on or returns the status of a forked child
(PHP 4 >= 4.0.7, PHP 5)
Suspends execution of the current process until a child as specified by the pid argument has exited, or until a signal is delivered whose action is to terminate the current process or to call a signal handling function. If a child as requested by pid has already exited by the time of the call (a so-called "zombie" process), the function returns immediately. Any system resources used by the child are freed. Please see your system's waitpid(2) man page for specific details as to how waitpid works on your system. Parameters
Return Valuespcntl_waitpid() returns the process ID of the child which exited, -1 on error or zero if WNOHANG was used and no child was available Code Examples / Notes » pcntl_waitpidadmin
Here's a decent example of the pcntl_waitpid() call: $i = 0; $starttime = microtime(TRUE); $pid_arr = array(); while ($i < intval($argv[1])) { $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else { if ($pid) // parent { $pid_arr[$i] = $pid; } else // child { performSomeFunction($i+1); } } $i++; } foreach ($pid_arr as $pid) { // we are the parent pcntl_waitpid($pid, $status); } $elapsed = microtime(TRUE) - $starttime; print "\n==> total elapsed: " . sprintf("%f secs.\n", $elapsed); kevin
--- while ($i < intval($argv[1])) { $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else { if ($pid) // parent { $pid_arr[$i] = $pid; } else // child { performSomeFunction($i+1); } } $i++; } --- careful, this will create a lot more children than you probably expect. You must return or exit after performSomeFunction($i+1); ie, else // child { performSomeFunction($i+1); exit(0); } |