我正在尝试从PHP运行两个exec命令。一个是可能运行几分钟的脚本,并且只能有一次它的实例。第二个exec只检查第一个进程是否正在运行,并允许您再次运行它或重定向您。代码是这样的。
这是主要过程
$command = '/home/user/active/Nem-Swd.elf 30 > /dev/null 2>&1 & echo $!';
这是检查另一个是否已经在运行的过程。
exec("ps ax | grep $name 2>&1", $output);
我知道在php API中它说:
如果使用此功能启动程序,为了使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。
但我不明白这意味着什么。
答案 0 :(得分:1)
这意味着如果运行exec命令而不重新路由其输出,则当前的PHP脚本将在终止脚本之前等待该命令完成。由于您将输出路由到标准输出,我相信您应该没问题。如果你刚刚运行exec($commandJob)
,那么就会遇到这个问题。
似乎已经回答了这个问题:
php in background exec() function
至少(例如)你需要这样做才能让它在后台运行:
exec("php test.php &");
还有其他方法可以启动可能值得研究的流程:
http://www.php.net/manual/en/book.pcntl.php
http://php.net/manual/en/function.popen.php