PHP exec 和 C++ 程序无限运行

标签 php c++ bash

所以我有一个小的 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++ 的了解不是太深,我真的不想更改代码,因为它是第 3 方库。

出于某种原因,我的 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-file to 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);
}

关于PHP exec 和 C++ 程序无限运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412575/

相关文章:

linux - 如何将文件从给定目录复制到目标目录的随机目录

php - Cookie token 与数据库不匹配

javascript - 属性符合我的值(value)

c++ - 如何将自定义数据类型(std::array 填充 std::pairs)写入文件流

c++ - 如何包含/链接 boost::regex 库?

node.js - 使用 Node.js 从 'named pipe'/fifo 读取

bash - 在 shell 脚本中,.[!.]* 是什么意思?

php - 使用 PHP 删除从 mysql 数据库中获取的重复结果

php - SSL 操作失败,代码为 1 Codeigniter 不发送电子邮件

c++ - boost::asio 计时器的线程安全工作