`ps aux` で参照されているコマンドが存在しませんか?

`ps aux` で参照されているコマンドが存在しませんか?

実行すると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

答え1

怪しい。プログラムは をオーバーライドできます$0。プログラムは Apache のふりをしていますが、実際は Perl です。

そこに行って/proc/$PID/fd、開かれているファイルを確認してください。これで何が起こっているのかの手がかりが得られるかもしれません。

答え2

デフォルトのリポジトリから apache2 をインストールしたとのことですが、何が欠けているかを確認するために、そのパッケージに基づいて整合性チェックを実行できますか?

誰か/何か/何らかの方法でApacheファイルの一部を削除したようです。しかし、Apacheはその前に起動されていたため、メモリに残っています。

関連情報