所以一般来说你可以在php中说exec('MyCommand &> /dev/null &')
并且MyCommand
将作为一个单独的进程执行,所以你的主要php执行可以继续它的快乐方式。
奇怪的是,如果你尝试使用Laravel的Artisan
来做这件事,那么就会出现问题。例如,令人惊讶的是,exec('php artisan command &> /dev/null &')
结果仍然悬挂在工匠命令完成之前。如果将artisan命令包装在bash脚本中,它将根本不执行。
为什么会这样,以及如何在新的分离过程中执行artisan命令?
答案 0 :(得分:1)
您必须创建一个新流程才能运行它:
$pid = pcntl_fork();
switch($pid)
{
case -1: // pcntl_fork() failed
die('could not fork');
case 0: // you're in the new (child) process
exec("php artisan command");
// controll goes further down ONLY if exec() fails
echo 'exec() failed';
default: // you're in the main (parent) process in which the script is running
echo "hello";
}