Mein Server war stark ausgelastet und ich habe Apache2 mit killall -9 apache2 gestoppt, bis die Last nachließ. Beim Starten von Apache2 erhielt ich den Fehler:
*# /etc/init.d/apache2 restart * Neustart des Webservers Apache2. httpd (PID 4457?) wird nicht ausgeführt (98). Adresse wird bereits verwendet: make_sock: konnte nicht an Adresse 0.0.0.0:80 gebunden werden. Keine Listening-Sockets verfügbar, wird heruntergefahren. Protokolle können nicht geöffnet werden.*
Ich habe dann lsof | grep "*.www" ausgeführt und den Prozess über Port 80 beendet.
Meine Frage lautet: Wie kann ein Prozess weiterhin Port 80 verwenden, selbst nachdem ich den Befehl „Kill All“ ausgeführt habe?
Antwort1
http://httpd.apache.org/docs/2.2/stopping.html
Um Apache zu stoppen oder neu zu starten, müssen Sie ein Signal an die laufenden httpd-Prozesse senden. Es gibt zwei Möglichkeiten, die Signale zu senden. Erstens können Sie den Unix-Befehl kill verwenden, um Signale direkt an die Prozesse zu senden.Sie werden feststellen, dass auf Ihrem System viele ausführbare httpd-Dateien ausgeführt werden, aber Sie sollten an keine von ihnen Signale senden, außer an die übergeordnete, dessen PID sich in der Pid-Datei befindet. Das heißt, Sie müssen niemals Signale an einen anderen Prozess als den übergeordneten Prozess senden. Es gibt vier Signale, die Sie an den übergeordneten Prozess senden können: TERM, USR1, HUP und WINCH, die in Kürze beschrieben werden.
Um ein Signal an das übergeordnete Element zu senden, sollten Sie einen Befehl wie den folgenden eingeben:
kill -TERM `cat /usr/local/apache2/logs/httpd.pid`
Meine Hervorhebung.