停止或者重新啟動Apache有兩種發送信號的方法 第一種方法: 直接使用linux的kill命令向運行中的進程發送信號。你也許你會註意到你的系統里運行著很多httpd進程。但你不應該直接對它們中的任何一個發送信號,而只要對已經在PidFile中記載下了自身PID的父進程發送信號。也就是說,你不必對父 ...
停止或者重新啟動Apache有兩種發送信號的方法
第一種方法:
直接使用linux的kill
命令向運行中的進程發送信號。你也許你會註意到你的系統里運行著很多httpd
進程。但你不應該直接對它們中的任何一個發送信號,而只要對已經在PidFile
中記載下了自身PID的父進程發送信號。也就是說,你不必對父進程以外的任何進程發送信號。你可以向父進程發送三種信號:TERM
、HUP
、USR1
,我們過一會兒再進行詳細的說明。
你可以用下麵這樣的命令來向父進程發送信號:
kill -TERM cat /usr/local/apache2/logs/httpd.pid
第二種方法
使用下麵將要描述的httpd
二進位可執行文件的 -k
命令行選項:stop
、restart
、graceful
、graceful-stop
。不過更推薦你使用apachectl
控制腳本來向httpd
二進位可執行文件傳遞這些選項。
當你向httpd
發送信號後,你可以這樣來讀取它的進行過程:
tail -f /usr/local/apache2/logs/error_log
1.停止 apachectl -k stop 發送TERM或stop信號到父進程可以使它立刻殺死所有子進程。這將花費一些時間來殺死所有子進程。然後父進程自己也退出。所有進行中的請求將被強行中止,而且不再接受其它請求。 2.重啟 apachectl -k restart 向父進程發送HUP或restart信號會使它象收到TERM信號一樣殺掉所有的子進程,不同之處在於父進程本身並不退出。它重新讀入配置文件、重新打開日誌文件。然後產生一系列新的子進程來繼續服務。 3.優雅重啟 apachectl -k graceful USR1或graceful信號使得父進程建議子進程在完成它們現在的請求後退出(如果他們沒有進行服務,將會立刻退出)。父進程重新讀入配置文件並重新打開日誌文件。每當一個子進程死掉,父進程立刻用新的配置文件產生一個新的子進程並立刻開始伺服新的請求。 4.優雅停止 apachectl -k graceful-stop WINCH或graceful-stop信號使得父進程建議子進程在完成它們現在的請求後退出(如果他們沒有進行服務,將會立刻退出)。然後父進程刪除PidFile並停止在所有埠上的監聽。父進程仍然繼續運行並監視正在處理請求的子進程,一旦所有子進程完成任務並退出或者超過由GracefulShutdownTimeout指令規定的時間, 父進程將會退出。在超時的情況下,所有子進程都將接收到TERM信號並被強制退出。