0

我似乎无法使用 system() 创建一个持久的分叉进程:(是的,参数没问题)

$args = "/code/perl/test/run $a $n $m $s $c &";
system($args);

但是,另一方面,这段代码可以工作,但它没有参数:

system("/code/perl/test/reset &");

那么,问题呢?我的 C 程序“运行”在 HTTP 请求的 PHP 脚本完成后立即被终止。

我尝试使用 at 守护进程使用单独的父进程创建进程,但没有成功。www-data 已从 /etc/at.deny 中删除

值得注意的是,在第二个示例中,我确实得到了程序输出,但不是第一个。

4

2 回答 2

1

From the docs:

If a program is started in this fashion, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

Therefore, if it's ending immediately, it most likely does not appear run is being ran. Try sending the output to a different file. Try: exec("/bin/echo $a $n $m $s $c > /tmp/echo &"); to start diagnostics.

After that, I would check for safe_mode and try escapeshellcmd. As a last resort, try the backtick ` operator.

于 2013-03-09T20:52:32.867 回答
0

这是 PHP 脚本完成,然后杀死所有附加到它的子进程的结果。

如果“at”解决方法不起作用(您使用 atd 将其安排为“现在”),就像它不适合我一样,您可能需要编写解决方法。我的解决方法只是将命令放在 /tmp/ 的文件中,然后让我的守护进程代码执行文件中的命令,然后将其截断。

于 2013-03-10T15:59:22.587 回答