在類unix系統中,信號是進程之間非常重要的一種通信方式,在操作系統上也為我們提供了操作信號的用戶接口(即命令行方式)。kill命令,如你所想的那樣,該命令是用來“殺死”進程的,但是這只是該命令執行結果的表現。那麼,實質是什麼呢?其實,kill命令是向由你指定的進程發送“殺死”這一信號的即SIGKILL。
“有兩個信號可以停止進程:SIGTERM 和 SIGKILL。 SIGTERM比較友好,進程能捕捉這個信號,根據您的需要來關閉程序。在關閉程序之前,您可以結束打開的記錄文件和完成正在做的任務。在某些情況下, 假如進程正在進行作業而且不能中斷,那麼進程可以忽略這個 SIGTERM信號。
對於SIGKILL信號,進程是不能忽略的。 這是一個 '“我不管您在做什麼,立刻停止”'的信號。 假如您發送SIGKILL信號給進程, FreeBSD就將進程停止在那裡。
您可能會去使用 SIGHUP、 SIGUSR1 和 SIGUSR2信號。 這都是些通用的信號,各種應用程序都可以應用在各方面的信號發送。
假如您改變了web系統的配置文件──並想web系統去重讀它的配置,您可以停止然後再啟動httpd。但這樣做web系統會導致一個短暫的中斷周期,那樣是不受歡迎的。幾乎所有的守護進程在編寫時,都會指定對SIGHUP 信號進行響應從而重讀配置文件。 所以, 最好的方法,就不是殺死並重啟 httpd, 而是發一個 SIGHUP 信號給它。因為在這方面沒有一個標准,不同的守護進程有不同的用法,所以不了解時應讀一下守護進程的文檔。”
所以,kill命令的實質就是向進程發送信號,就如上面所說一樣,當我們修改了守護進程的配置文件而又要求其重新加載時,我們不需要重啟計算機,不需要殺死服務在重新啟動它,我們只需要使用kill命令向該守護進程發送SIGHUP信號即可:
kill -HUP 守護進程pid
這樣該守護進程就會重新讀取配置文件。