0

所以一般来说,你可以exec('MyCommand &> /dev/null &')在 php中说,MyCommand并将作为一个单独的进程执行,所以你的主要 php 执行可以继续以它的快乐方式。

奇怪的是,如果你尝试使用 Laravel 来做到这一点,就会出现一些问题Artisan。例如,exec('php artisan command &> /dev/null &')结果令人惊讶的是,在工匠命令完成之前,该过程仍然挂起。如果将 artisan 命令包装在 bash 脚本中,它根本不会执行。

为什么会这样,以及如何在新的分离进程中执行工匠命令?

4

1 回答 1

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";
}
于 2014-09-25T01:43:51.007 回答