
我想知道為什麼啟動apache2伺服器的命令實際上啟動了三個進程
事實上,輸入這個命令:
sudo apache2ctl -k start
然後,輸入以下命令:
ps aux | grep apache2
給出了對應於apache2的三個進程。這樣正常嗎?
答案1
是的。 Apache 有幾個不同的處理模組來處理請求。最常見的是worker
和prefork
。兩者都使用多個進程。Prefork
每個用戶端連線使用一個進程,並始終確保有一些空閒進程可用於立即處理新連線。Worker
仍然使用多個進程,但也在這些進程中使用執行緒。與通常情況相比,這使用更少的資源,prefork
但仍然需要多個進程。
您看到的一個進程可能是「主」進程,它會開啟 TCP 連接埠並等待連接,並將傳入連線傳遞到另一個 apache 進程以進行實際處理。其他進程是工作進程,要么來自模組,prefork
要么worker
來自模組。