私のサーバーの負荷が高かったので、killall -9 apache2 を使用して負荷が下がるまで Apache2 を停止しました。Apache2 を起動すると、次のエラーが発生しました:
*# /etc/init.d/apache2 restart * Web サーバー apache2 httpd (pid 4457?) を再起動しています。実行されていません (98) アドレスは既に使用されています: make_sock: アドレス 0.0.0.0:80 にバインドできませんでした。リスニング ソケットが利用できません。シャットダウンします。ログを開けません。*
次に、lsof | grep "*.www" を実行し、ポート 80 を使用してプロセスを強制終了しました。
私の質問は、kill all コマンドを実行した後でも、プロセスがポート 80 を引き続き使用できるのはなぜかということです。
答え1
http://httpd.apache.org/docs/2.2/stopping.html
Apache を停止または再起動するには、実行中の httpd プロセスにシグナルを送信する必要があります。シグナルを送信する方法は 2 つあります。1 つ目は、unix kill コマンドを使用してプロセスに直接シグナルを送信する方法です。システム上で多くのhttpd実行ファイルが実行されていることに気づくでしょうが、親以外のいずれにもシグナルを送信しないでください。、その pid は PidFile にあります。つまり、親プロセス以外のプロセスにシグナルを送信する必要はまったくありません。親プロセスに送信できるシグナルは TERM、USR1、HUP、WINCH の 4 つで、これらについては後ほど説明します。
親に信号を送信するには、次のようなコマンドを発行する必要があります。
kill -TERM `cat /usr/local/apache2/logs/httpd.pid`
私の強調点。