首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP通过shell_exec发送SIGHUP信号

用PHP通过shell_exec发送SIGHUP信号
EN

Stack Overflow用户
提问于 2011-10-10 16:36:39
回答 1查看 1.9K关注 0票数 2

我试图使用向外部进程发送信号。目前,我正在做以下工作:

代码语言:javascript
复制
$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_execpwd命令和uptime命令的输出返回给浏览器,而不返回ls命令。但是当从命令行运行时,shell_exec通常会从ls返回输出。

这些命令还有另一个限制吗?

此外,还有几个注意事项:

off

  • error_reporting =E_ALL

  • 安全模式,没有函数禁用
  • ,我已经尝试显式地指向二进制文件(Ex )。/bin/ps和sh -c ps)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-10 17:03:51

试一试

代码语言:javascript
复制
echo shell_exec('(ps -ef | grep mosquitto | grep -v grep | awk \'{print $2}\') 2>&1');

看看是否报告了任何错误。此外,您也可以尝试pgreppkillkillall,而不是乱搞psgrep

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

编辑:根据注释,实际问题似乎是缺少或错误设置了PATH环境变量。解决此问题的一种方法是在shell中运行echo $PATH,复制输出并将PATH设置为与putenv()相同的值。另一种解决方案是在shell中使用which来确定ps等人的完整路径,并在shell_exec()中使用这些完整路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7715922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档