
更新:回覆評論:
檢查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 不想很好地停止,您真正想做的是調查發生了什麼。但要弄清楚到底發生了什麼事可能很困難。
進程 ID 的交互strace
可以提供有關哪些網站正在運行並導致問題的線索。從上面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
可以詢問進程(透過發送訊號對他們)停止。該kill
命令是執行此操作的一種方法。如果您知道進程的進程 ID (PID),可以透過在終端機中執行以下命令來很好地查詢:
kill PID_OF_YOUR_PROCESS
上面的範例向 PID 發送預設的 TERM 訊號(代碼 15)。您可以在以下位置找到訊號代碼Kill 的手冊頁( man kill
)。
當程式忽略發送給它們的 TERM 訊號時,仍然可以透過發送 KILL 訊號(代碼 9)來施加更大的壓力。該訊號被用作最後的手段,因為該進程可能不會保存任何未保存的資料。
在進程 ID 之前指定 a-SIGNAL_CODE
為第一個參數將向進程發送特定訊號。該命令的另一個有用的功能kill
是您可以指定更多 PID,如下例所示:
kill -9 PID1 PID2 PID3 PID4
嘗試使用該kill -9
行終止 Apache 進程。他們應該停止,除非有什麼阻礙他們這樣做。