【问题标题】:End Process Created by PHP exec in Ubuntu using Apache结束进程由 PHP exec 在 Ubuntu 中使用 Apache 创建
【发布时间】:2021-06-02 09:16:47
【问题描述】:

我有一个在 VirtualBox 中运行的 Ubuntu 虚拟机,它使用 Apache 托管服务器。服务器的概念是接受 HTTP POST 请求,将它们存储在 MySQL 数据库中,然后执行 Python 脚本,将相关的 POST 数据显示在 Discord 频道中。

进程本身正在运行,但每次 PHP 脚本调用 Python 脚本时,都会创建一个从未真正结束的新进程。在接收实时数据几个小时后,由于延迟进程的数量,服务器耗尽了可用内存。 PHP 脚本的最后一行代码有以下 exec 调用;

exec("python3 main.py $DATA");

我想想出一种方法来实际杀死从这个 exec 命令创建的进程(使用用户 www-data),或者在脚本执行后的 Python 文件中,或者使用我可能只是的 Apache 设置自动杀死不知道。

在终端中运行以下命令时,我可以看到不同的进程;

ps -o pid,user,%mem,command ax | sort -b -k3 -r

显示了 3 个单独的进程,其中 1 个引用了 PHP 中标记的实际 python3 exec 命令;

  • 9903 www-data 0.4 python3 main.py DATADATADATADATADATADATA

然后另一个进程显示更常见的 -k start 命令;

  • 9907 www-data 0.1 /usr/sbin/apache2 -k start

最后还有一个与 PHP exec 命令非常相似的进程;

  • 9902 www-data 0.0 sh -c python3 main.py DATADATADATADATADATADATA

我如何确保 Apache 清理这些进程 - 或者我需要在我的 Python 或 PHP 代码中添加什么以适当地执行 Python 脚本而不留下进程?

【问题讨论】:

    标签: php apache ubuntu memory process


    【解决方案1】:

    没有意识到 php 中的exec 命令会无限期地等待返回输出。将此添加到我在exec 调用中使用的字符串的末尾; > /dev/null &

    即:exec("python3 main.py $DATA > /dev/null &");

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2011-11-29
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多