Команда, указанная в `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
Для справки, я использую Ubuntu Ubuntu 10.04.4 LTS под управлением Apache2 из репозитория apt по умолчанию.
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
2 ответа
Запах рыбный. Программы могут переопределить их $0
, Программа притворяется Apache, но на самом деле это perl.
Идти к /proc/$PID/fd
и посмотрите, какие файлы открыты, может быть, это даст вам понять, что происходит.
Вы сказали, что установили apache2 из репозитория по умолчанию. Можете ли вы запустить проверку согласованности на основе этого пакета, чтобы проверить, чего не хватает?
Кажется, кто-то / что-то / каким-то образом удалил некоторые файлы apache. Но Apache был запущен до этого, поэтому он все еще остается в памяти