2012年11月13日 星期二

Linux Kill 指令

一個 deamon 程式,是常駐在系統背景的程式。一旦開始啟動執行了之後,就無法用一般的方式去控制它,結束它。deamon 也是 process,所以會有 PID (Process identifier),也能透過 IPC 的方式來溝通,自然也就能送終止訊號給 deamon,或者其他的訊號讓它做別的事。

Linux Kill 指令,主要就是用來送訊號給 Process 的指令,如果想要停止某個 Process,很簡單,只要先利用 ps 指令,找到你想要終止的 Process 的 PID,就可以利用 Kill 指令去停止它。底下是利用 ps -aux 指令的執行結果。箭頭指的那一行就是 PID。


知道了PID之後,就能利用 Kill 指令,去終止 Process。
例如:Kill 2942,就能終止 PID 為 2942 的 Process

這樣的使用方式,算是比較常見的,但如果說你自己寫了一個 deamon,你希望你的deamon,在收到特定的訊號之後能依照你的要求執行,那該怎麼做?

首先,你必須先設定 deamon 在執行時,如果收到你想要處理的訊號時,要執行你規定的 handler。

    if (signal (SIGTERM, signal_handler) == SIG_ERR) {
        len = snprintf(buf, sizeof(buf), "Cannot handle SIGTERM!\n");
        write(log_fd, buf, len);
    }

上面的程式碼,說明當收到 SIGTERM 訊號時,就去執行 signal_handler 這個函式(它所做的事情是自己定義的)。接著,你要知道的就是怎麼產生特定的訊號,剛才提到的 Kill 指令就可以做到!去查一下 Kill 的說明(man kill),可以看到它可以使用參數。

       kill [ -signal | -s signal ] pid ...
       kill [ -L | -V, --version ]
       kill -l  [ signal ]

要讓你的 deamon 收到 SIGTERM 訊號,可以用以下的形式

    kill -15 PID
    kill -SIGTERM PID
    kill -TERM PID

注意,並非所有的訊號都可以使用這3種形式,使用前請先檢查一下。

沒有留言:

張貼留言