我正在测试一个在Debian的OS-X系统上开发的php脚本,它在那里表现不同。
为了重现它,我编写了两个脚本:parent.php和child.php:
parent.php:
#!/usr/bin/php
<?php
echo "parent started...\n";
shell_exec(__DIR__ . '/child.php &2>/dev/null &');
echo "parent finished.\n";
child.php:
#!/usr/bin/php
<?php
echo "child started...\n";
sleep(5);
echo "child finished.\n";
在OS-X上运行parent.php我立即返回两个输出行(父启动,父完成)。在Debian上,我得到“父母开始...”行,然后延迟5秒,然后“父母完成。”。运行“./child.php&amp; 2&gt; / dev / null&amp;”在shell中按预期立即回复提示。我有什么想法可以解决这个问题吗?
答案 0 :(得分:4)
这是因为&2>
部分。并非所有系统都支持它。也在每个shell(bash,sh,ksh等)中。
试试这个,
exec("/bin/bash -c '/usr/bin/php /path/to/child.php 2> /dev/null' &");
如果要禁止所有输出,请使用
exec("/bin/bash -c '/usr/bin/php /path/to/child.php &> /dev/null ' &");
刚刚测试过,exec("/usr/bin/php /path/to/child.php > /dev/null 2>&1 &")
也应该有用。
答案 1 :(得分:2)