fork : add startDetachedChild

git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@4007 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
2017-12-22 12:37:23 +00:00
parent 75f2df3da6
commit 8822ec580e

View File

@@ -55,6 +55,42 @@ class fork
exit;
}
/** Create a detached child. The terminal is closed. All the displayed
* messages from the child are silently dropped.
* If some parameters are provided, the called child method will receive them
* This function fork and return the child PID
* @param callable $callable The callback method to use in child
* @param mixed|null $params The params to provide to child method
* @return The child PID
*/
public function startDetachedChild ($callable, $params = array ())
{
$pid = pcntl_fork ();
if ($pid === -1)
throw new \Exception ("Can't fork the child", 500);
elseif ($pid)
{
// The parent
$this->pidList[$pid] = $pid;
return $pid;
}
// Call the child method
$sid = posix_setsid();
// Will catch all the text messages from the application to not crash if
// there is an "echo"
ob_start ();
// Close the file handlers STDOUT/STDIN
fclose (STDIN);
fclose (STDOUT);
fclose (STDERR);
$args = func_get_args ();
unset ($args[0]);
call_user_func_array ($callable, $args);
exit;
}
/** Wait the end of one child
* Return the PID of the dead child
*/