Currently my solution is:
exec('php file.php >/dev/null 2>&1 &');
and in file.php
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:
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:
$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;