PHP: how to start a separate process?

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 a way to do this with exec?

+7
linux php parallel-processing
source share
2 answers

No, this cannot be done using exec() (and shell_exec() or system() )


If you have the pcntl extension installed , it will 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; } } 

Name it as follows:

 $pid = detached_exec($cmd); if($pid === FALSE) { echo 'exec failed'; } // do some work // kill child posix_kill($pid, SIGINT); waitpid($pid, $status); echo 'Child exited with ' . $status; 
+5
source share

If your current user has sufficient permissions to do this, this should be possible with exec and so:

 /* / Start your child (otherscript.php) */ function startMyScript() { exec('nohup php otherscript.php > nohup.out & > /dev/null'); } /* / Kill the script (otherscript.php) / NB: only kills one process at the time, otherwise simply expand to / loop over all complete exec() output rows */ function stopMyScript() { exec('ps a | grep otherscript.php | grep -v grep', $otherProcessInfo); $otherProcessInfo = array_filter(explode(' ', $otherProcessInfo[0])); $otherProcessId = $otherProcessInfo[0]; exec("kill $otherProcessId"); } // ensure child is killed when parent PHP  / process exits register_shutdown_function('stopMyScript'); startMyScript(); 
+5
source share

All Articles