Currently my solution is:
JavaScript
x
exec('php file.php >/dev/null 2>&1 &');
and in file.php
JavaScript
if (posix_getpid() != posix_getsid(getmypid()))
posix_setsid();
is there any way I can do this just with exec?
Advertisement
Answer
No, detaching can’t be done with exec()
directly (nor shell_exec()
or system()
, at least not without changing the command, and using third-party tool which does detach).
If you have the pcntl extension installed, it would be:
JavaScript
function detached_exec($cmd) {
$pid = pcntl_fork();
switch($pid) {
// fork errror
case -1 : return false;
// this code runs in child process
case 0 :
// obtain a new process group
posix_setsid();
// exec the command
exec($cmd);
break;
// return the child pid in father
default:
return $pid;
}
}
Call it like this:
JavaScript
$pid = detached_exec($cmd);
if($pid === FALSE) {
echo 'exec failed';
}
// ... do some work ...
// Optionally, kill child process (if no longer required).
posix_kill($pid, SIGINT);
waitpid($pid, $status);
echo 'Child exited with ' . $status;