【问题标题】:child processes seperate from main process bash shell php子进程与主进程bash shell php分开
【发布时间】:2012-02-14 20:57:41
【问题描述】:

我正在从我的 php 代码中调用销售脚本 和

foreach ($some_array) {
     shell_exec(nohup $code); 
}

如上

我希望所有shell_exec 调用独立于邮件进程工作,这是我们称为 shell 脚本的 php 执行

但它没有像我预期的那样工作,所有 shell_executions 在前一个完成后立即开始

那么我怎样才能让这个 shell_exec 调用作为独立的子进程,他们不等待对方完成

提前致谢

【问题讨论】:

标签: php linux bash shell process


【解决方案1】:

将“&”添加到您要执行的命令的末尾,以便它在后台运行。

【讨论】:

    【解决方案2】:

    对于一系列命令,将它们括在括号中,然后附加 & 符号,但请务必将 stdout、stderr 重定向到某个地方,否则您的脚本将挂起等待,例如:

    <?php
    
    exec('( sleep 10; echo "finished" | mail ian@example.com ) &> /dev/null &');
    
    ?>
    

    http://us.php.net/manual/en/function.exec.php

    【讨论】:

    • 我认为在这里包含&gt; /dev/null 很重要。
    • @soField 这不是我的;我从 php.net 上的解释中得到它。但是,我在自己的网站上做过类似的事情,效果很好。
    【解决方案3】:

    将它们发送到后台

    shell_exec("nohup somecommand &");
                                  ^---run job in background
    

    【讨论】:

    • 不起作用,至少在 PHP 5.5 中是这样。尝试将这个简单的脚本保存为test.php 并运行它:&lt;?php sleep(1); shell_exec('nohup php test.php &amp;'); ?&gt;。您会在ps -e 中看到越来越多的 PHP 进程列表。
    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2012-10-26
    • 2013-09-26
    • 2013-01-03
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多