Apacheプロセスを停止できない

Apacheプロセスを停止できない

アップデート:コメントへの返信:

Apache のプロセスを確認します。

$ ps a | grep apache 3
grep: 3: No such file or directory
$ ps a | grep apache
 4514 pts/0    S+     0:00 grep --color=auto apache
$ ps a | grep apache2
 4516 pts/0    S+     0:00 grep --color=auto apache2

Apache エラーログを確認する

$ tail /var/log/apache2/error.log
[Sun Aug 07 03:14:19 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 08 03:13:58 2011] [notice] Graceful restart requested, doing restart
[Mon Aug 08 03:14:00 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 08 09:03:16 2011] [notice] caught SIGTERM, shutting down
[Mon Aug 08 09:05:47 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations

オリジナル:Apache を停止しましたが、まだ同じ数のプロセスが実行されているのはなぜですか?

$ ps -A | grep apache
 1663 ?        00:00:00 apache2
 1667 ?        00:00:00 apache2
 1668 ?        00:00:00 apache2
 1669 ?        00:00:00 apache2
 1670 ?        00:00:00 apache2
 1671 ?        00:00:00 apache2
$ /etc/init.d/apache2 stop
 * Stopping web server apache2                            [ OK ] 
$ ps -A | grep apache
 1663 ?        00:00:00 apache2
 1667 ?        00:00:00 apache2
 1668 ?        00:00:00 apache2
 1669 ?        00:00:00 apache2
 1670 ?        00:00:00 apache2
 1671 ?        00:00:00 apache2

ありがとう!

答え1

これは、Apacheが適切に停止することを拒否したり、ゾンビプロセス前者の場合は、 で実行中のすべてのプロセスを強制終了できますsudo killall -9 apache2。ただし、後者の場合は、プロセスがなくなるまで待つ必要があります。Apache がうまく停止しない場合は、何が起こっているのかを調べる必要があります。ただし、何が起こっているのかを正確に把握するのは難しい場合があります。

straceプロセスIDをインタラクティブに調べると、どのサイトが動作して問題を引き起こしているかの手がかりが得られるかもしれません。上記の例からps -A、最初のプロセスを確認することができます。

strace -p 1663

これにより、実行中のプロセスのスタックトレースがアタッチされ、何が起こっているかのライブ出力が提供されます。いつでもCtrl+C

追加のリソースはApacheのメインエラーログです。これは、次の場所にあります。/var/log/apache2/error.logログのかなりの部分を取得して、詳細を確認することをお勧めします。問題が実行中の継続的な問題である場合は、

tail -f /var/log/apache2/error.log

これは と同様にstraceリアルタイムで実行されます。最後の N 行を-fに置き換えます。-#ここでは#50、100、282 などの正の数値です。

答え2

サービスを停止するための適切な権限があることを確認してください。

実行する場合:

service apache2 stop

次の場合、エラーは発生しません:

* Webサーバーapache2を停止しています

試す:

sudo service apache2 stop      

答え3

私も同じ問題を抱えていたので、次のことを試しました。

sudo apache2ctl stop

サービスを停止し、

sudo apache2ctl start

もう一度やり直します。

私にとってはうまくいきました。何か提案があれば歓迎します。

答え4

プロセスは(信号プロセスを停止するには、プロセスに割り当てられた ID 番号 (プロセス ID に割り当てられた ID 番号) を要求します。 このkillコマンドは、その方法の 1 つです。プロセスのプロセス ID (PID) がわかっている場合は、ターミナルで以下のコマンドを実行することで、プロセス ID を問い合わせることができます。

kill PID_OF_YOUR_PROCESS

上記の例では、PIDにデフォルトのTERM信号(コード15)を送信します。信号コードは、kill のマニュアルページman kill)。

プログラムが送信された TERM シグナルを無視する場合でも、KILL シグナル (コード 9) を送信することで、もう少し圧力をかけることが可能です。このシグナルは、プロセスが未保存のデータを一切保存しない可能性があるため、最後の手段として使用されます。

プロセス ID の前の最初のパラメータとしてa を指定する-SIGNAL_CODEと、プロセスに特定のシグナルが送信されます。このkillコマンドのもう 1 つの便利な機能は、次の例のように、より多くの PID を指定できることです。

kill -9 PID1 PID2 PID3 PID4

行を使用して Apache プロセスを終了してみてくださいkill -9。何かがブロックしない限り、プロセスは停止するはずです。

関連情報