`ps aux`中引用的命令不存在?

当我运行ps aux | grep /usr/local/apache/bin/httpd ps aux | grep /usr/local/apache/bin/httpd我得到以下输出。

 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 9837 0.0 0.0 23112 1360 ? S Oct15 0:00 /usr/local/apache/bin/httpd -DSSL www-data 9841 0.0 0.0 23112 1568 ? S Oct15 0:16 /usr/local/apache/bin/httpd -DSSL www-data 29178 0.0 0.0 23112 1064 ? S Oct04 1:51 /usr/local/apache/bin/httpd -DSSL 

我觉得有趣的是/usr/local/apache/bin/httpd不存在。 根本没有/usr/local/apache/bin/目录。

sudo cat /proc/9837/cmdline返回/usr/local/apache/bin/httpd -DSSL

当我运行/proc/9837$ sudo /usr/local/apache/bin/httpd -DSSL我得到:

/usr/local/apache/bin/httpd: command not found

当我运行sudo ls -l /proc/9837/exe我得到:

lrwxrwxrwx 1 www-data www-data 0 2012-10-17 02:06 /proc/9837/exe -> /usr/bin/perl

我的问题是,这是为什么发生? 不应该/proc/<pid>/cmdline/proc/<pid>/exe相关吗? 如果这不正常,我可以采取哪些措施来找出是什么原因造成的?

甚至在运行sudo /etc/init.d/apache2 stop之后,这些进程仍然保留

作为参考,我正在运行从默认的apt库运行Apache2的Ubuntu Ubuntu 10.04.4 LTS。


sudo ls -l /proc/9837/fd输出

 lr-x------ 1 www-data www-data 64 2012-10-17 02:47 0 -> /dev/null l-wx------ 1 www-data www-data 64 2012-10-17 02:47 1 -> pipe:[37796710] l-wx------ 1 www-data www-data 64 2012-10-17 02:47 2 -> /var/log/apache2/error.log lrwx------ 1 www-data www-data 64 2012-10-17 02:47 3 -> socket:[37796725] lr-x------ 1 www-data www-data 64 2012-10-17 02:47 4 -> pipe:[40055427] 

stat /proc/9837/root返回

  File: `/proc/9837/root' -> `/' Size: 0 Blocks: 0 IO Block: 1024 symbolic link Device: 3h/3d Inode: 49853155 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 33/www-data) Gid: ( 33/www-data) Access: 2012-10-17 02:07:00.240782014 -0400 Modify: 2012-10-17 02:06:43.860777313 -0400 Change: 2012-10-17 02:06:43.860777313 -0400 

气味腥。 程序可以覆盖他们的$0 。 该程序伪装成Apache,但实际上它是perl。

/proc/$PID/fd看看打开了什么文件,也许这个给你一个线索是怎么回事。

你说你已经从默认的存储库安装了apache2。 你可以运行一个基于该包的一致性检查,以检查缺less什么?

似乎有人/某事/某种方式删除了一些Apache文件。 但是在这之前apache已经启动了,所以它仍然保留在内存中