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问题。 什么奇怪的(对我来说),当我login为apache用户,手动运行ps ,它工作正常(显示一切)。

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

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

尝试运行一个更完整的ps电话,如:

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

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

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

可能是selinux。 SELinux限制了httpd运行的域名,所以只能查看自己的进程。

你可以: –

  1. 关掉selinux(wouldnt推荐) – 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”插入新的模块。

你应该看到一个直接的结果。