我试图使用向外部进程发送信号。目前,我正在做以下工作:
$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将pwd命令和uptime命令的输出返回给浏览器,而不返回ls命令。但是当从命令行运行时,shell_exec通常会从ls返回输出。
这些命令还有另一个限制吗?
此外,还有几个注意事项:
off
发布于 2011-10-10 17:03:51
试一试
echo shell_exec('(ps -ef | grep mosquitto | grep -v grep | awk \'{print $2}\') 2>&1');看看是否报告了任何错误。此外,您也可以尝试pgrep、pkill或killall,而不是乱搞ps和grep。
或者,尝试只运行ps并自己解析它的全部输出。(preg_match()和/或preg_grep()可能对此有用。)您可以使用posix_kill()而不是运行外部kill程序。
编辑:根据注释,实际问题似乎是缺少或错误设置了PATH环境变量。解决此问题的一种方法是在shell中运行echo $PATH,复制输出并将PATH设置为与putenv()相同的值。另一种解决方案是在shell中使用which来确定ps等人的完整路径,并在shell_exec()中使用这些完整路径。
https://stackoverflow.com/questions/7715922
复制相似问题