Apache+PHP 问题:无法列出除 apache 之外的其他进程

Apache+PHP 问题:无法列出除 apache 之外的其他进程

我刚刚安装了 Apache (2.2.3/Centos) + PHP(5.1.6),存在以下问题:我需要监视一个进程的生命周期,为此我运行:

$last_line = exec('ps -C snmpd');

并检查其输出。

不幸的是我总是什么也得不到。我用其他进程名检查过,似乎它只能“看到”Apache 的进程。

知道如何解决这个问题吗?

更新: 其他命令的执行system('snmpget -v2c -c public localhost '.$oid, $retval);效果很好,只有 有问题ps。奇怪的是(对我来说),当我以apache用户身份登录并ps手动运行时,它可以正常工作(显示所有内容)。

答案1

您将只能看到 Web 服务器正在运行的用户的进程,因为这是执行命令的用户。

如果您需要以不同用户身份运行命令,请查看 suexec。http://httpd.apache.org/docs/2.2/suexec.html

答案2

尝试运行更完整的ps调用,例如:

ps aux | grep -i snmpd | grep -v grep

答案3

您也可以使用反引号运算符来实现相同的目的。我确认它可以工作,而 exec 则不行。

$out = `ps -aux|grep pianobarfly|grep -v grep`;

答案4

可能是 selinux。SELinux 限制 httpd 运行的域,因此它只能查看自己的进程。

您可以:-

  1. 关闭 selinux(不建议这样做)- setenforce 0
  2. 使 httpd 不使用 selinux(也不推荐这样做因为 httpd 是一个可能的攻击媒介)setsebool -P httpd_disable_trans = 1。重新启动 httpd。
  3. 更改策略以允许查看 /proc 中的进程。

这应该可以做到:-

policy_module(myhttpd,1.0.0)

gen_require(`
    type httpd_t;
')

kernel_read_system_state(httpd_t);

从 yum 安装 selinux-policy-devel。

然后运行命令“make -f /usr/share/selinux/devel/Makefile load”插入新模块。

您应该会立即看到结果。

相关内容