是否有一种方法不等待shell_exec完成


Is there a way not to wait for shell_exec to complete?

我使用shell_exec()来运行perl程序,该程序需要一个多小时才能通过要求用户输入一些值来完成任务。我想运行shell_exec()作为后台程序,并刷新摘要页回到索引页。我发现了一些建议,在shell_exec()结束时使用'2>/dev/null &',但是,它在运行我的index.php时不起作用,它停留在与等待符号相同的页面上。

如果有其他的技巧来处理这种情况也会很棒。

任何建议吗?

您需要重新分配stdout和stderr。

command >/dev/null 2>&1 &

>用于将所有标准输出发送到/dev/null2>正在发送所有错误。&1表示将其发送到与标准输出相同的地方。

这也可以用于日志文件

command >>command.log 2>>&1 &

>>将追加而不是覆盖

最后,我设法使system()工作相应的期望输出使用cgi而不是PHP,这是失败的简单。我认为类似的解决方案可以在PHP中找到:

# fork this process
 my $pid = fork();
 die "Fork failed: $!" if !defined $pid;
 if ($pid == 0) {
# do this in the child
 open STDIN, "</dev/null";
 open STDOUT, ">/dev/null";
 open STDERR, ">/dev/null";
 system("perl script.pl > output.log");
 }

希望对大家有帮助!