gpt4 book ai didi

php - 通过 shell_exec 使用 PHP 发送 SIGHUP 信号

转载 作者:行者123 更新时间:2023-12-04 18:30:56 24 4
gpt4 key购买 nike

我正在尝试发送 SIGHUP 使用 PHP 向外部进程发送信号。目前,我正在执行以下操作:

$pid = shell_exec('ps -ef | grep mosquitto | grep -v grep | awk \'{print $2}\'');
shell_exec('kill -s HUP $pid');

当我从命令行运行“ php test.php ”时,我已验证信号已按预期发送到正确的进程。

当我通过访问 调用脚本时http://foo.com/bar/test.php ,不发送信号,并且 shell_exec 不返回任何内容。

为了测试,我暂时以 root 权限运行 PHP,但遇到了同样的问题,所以我认为这不是权限问题。

有趣的是, shell_exec 返回 的输出密码 命令和 正常运行时间 命令到浏览器,但不是 ls 命令。但是从命令行运行时,shell_exec 会正常返回 ls 的输出。

我缺少这些命令的另一个限制吗?

另外,一些注意事项:
  • 安全模式已关闭
  • error_reporting = E_ALL
  • 没有功能被禁用
  • 我已尝试明确指向二进制文件(例如/bin/ps 和 sh -c ps)
  • 最佳答案

    尝试

    echo shell_exec('(ps -ef | grep mosquitto | grep -v grep | awk \'{print $2}\') 2>&1');

    并查看是否报告了任何错误。另外,你可以试试 pgrep , pkill killall 而不是弄乱 psgrep .

    或者,尝试运行 ps并自己在 PHP 中解析其完整输出。 ( preg_match() 和/或 preg_grep() 可能对此有用。)
    您可以使用 posix_kill() 而不是运行外部 kill程序。

    编辑:根据评论,实际问题似乎是丢失或设置不正确 PATH环境变量。解决此问题的一种方法是运行 echo $PATH在 shell 中,复制输出并设置 PATH在 PHP 中与 putenv() 的值相同.另一种解决方案是使用 which 在 shell 中确定到 ps 的完整路径等,并在 shell_exec() 中使用这些完整路径.

    关于php - 通过 shell_exec 使用 PHP 发送 SIGHUP 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715922/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com