因此,我有一个小的PHP代码段,该代码段使用了exec函数。
在我的示例中,我运行以下代码:

// a bit setup before, but that is not too relevant for now
$jobs = count($redis->keys('*')); // outputs 10 if the job-amount is reached

if($jobs == 10) {
    exec("/usr/src/gx/examples/cpp/cpd/cpd01.out > /dev/null 2>&1 &");
}


首先:我知道,我不必将它们分开,但是我对c ++的了解不是很深,并且我真的不想更改代码,因为它是3rd party lib。

由于某种原因,我的PHP脚本在达到10个作业后无法运行。我可以说,调用了C ++脚本,但似乎它永远不会回到PHP。

我发现了类似的话题和问题,但到目前为止没有任何帮助

我认为C ++代码不应该那么重要。尽管如此,我还是添加了它。

在我的shell中,我只需使用./运行命令或调用完整路径:/usr/src/ex/examples/cpp/cpd/cpd01.out,一切都将正常运行。

C++ Code

有任何想法吗?

//更新1

我将代码扩展为:

exec("/usr/src/gx/examples/cpp/cpd/cpd01.out > /dev/null 2>&1 &", $array, $status );
$redis->flushdb();
fwrite($fp, $status . "\n");
fwrite($fp, "------------\n");
fwrite($fp, print_r($array));


结果是:

0
------------
10
------------
10
------------
10
------------
1


另外,我只使用chown cpd01.out文件来www-data:www-data

最佳答案

首先,您的用户(运行脚本的用户,如果是Apache,则为www-data)是否具有运行该脚本的权限?

如果定义第二个参数,则它将返回一个数组,该数组的输出用于调试目的,而第三个参数的退出状态为命令(http://php.net/manual/en/function.exec.php)。

if($jobs == 10) {
    exec("/usr/src/gx/examples/cpp/cpd/cpd01.out 2>&1", $array, $status);
    echo $status . "\n";
    var_dump($array);
}

09-10 03:50
查看更多