当我运行时,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
作为参考,我正在运行 Ubuntu Ubuntu 10.04.4 LTS,从默认 apt 存储库运行 Apache2。
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
答案1
有点可疑。程序可以覆盖它们的$0
。该程序假装是 Apache,但实际上它是 perl。
去/proc/$PID/fd
看看它打开了哪些文件,也许这会给你提供一些线索来了解发生了什么。
答案2
你说你已经从默认存储库安装了 apache2。你能否基于该包运行一致性检查来检查缺少了什么?
似乎有人/某事/以某种方式删除了一些 apache 文件。但 apache 在此之前已经启动,因此它仍保留在内存中