
Beim Ausführen ps aux | grep /usr/local/apache/bin/httpd
erhalte ich die folgende Ausgabe.
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
Interessant finde ich allerdings, dass es das /usr/local/apache/bin/httpd
nicht gibt. Es gibt /usr/local/apache/bin/
überhaupt kein Verzeichnis.
sudo cat /proc/9837/cmdline
kehrt zurück/usr/local/apache/bin/httpd -DSSL
Beim Ausführen /proc/9837$ sudo /usr/local/apache/bin/httpd -DSSL
erhalte ich Folgendes:
/usr/local/apache/bin/httpd: command not found
Beim Ausführen sudo ls -l /proc/9837/exe
erhalte ich Folgendes:
lrwxrwxrwx 1 www-data www-data 0 2012-10-17 02:06 /proc/9837/exe -> /usr/bin/perl
Meine Frage ist, warum das passiert? Sollte das nicht /proc/<pid>/cmdline
damit /proc/<pid>/exe
zusammenhängen? Wenn das nicht normal ist, welche Schritte kann ich unternehmen, um die Ursache herauszufinden?
Diese Prozesse bleiben auch nach dem Ausführen bestehensudo /etc/init.d/apache2 stop
Als Referenz: Ich verwende Ubuntu Ubuntu 10.04.4 LTS mit Apache2 aus dem Standard-Apt-Repository.
sudo ls -l /proc/9837/fd
Ausgänge
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
kehrt zurück
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
Antwort1
Das riecht komisch. Programme können ihre überschreiben $0
. Das Programm gibt vor, Apache zu sein, ist aber in Wirklichkeit Perl.
Gehen Sie zu /proc/$PID/fd
und schauen Sie nach, welche Dateien geöffnet wurden. Vielleicht gibt Ihnen das einen Hinweis darauf, was los ist.
Antwort2
Sie sagten, dass Sie Apache2 aus dem Standard-Repository installiert hätten. Können Sie basierend auf diesem Paket eine Konsistenzprüfung ausführen, um zu prüfen, was fehlt?
Es scheint, dass irgendjemand / irgendetwas / irgendwie einige der Apache-Dateien gelöscht hat. Aber Apache wurde vorher gestartet, also sind sie immer noch im Speicher