1. 程式人生 > >Kill 不只是kill,也可發訊號給自己的程序

Kill 不只是kill,也可發訊號給自己的程序

今天在看伺服器的啟動和停止指令碼時,看到這樣一個kill命令:kill -USR1 $pid;

上網查了一下,知道這個kill命令是給自己的程序發訊號的,通過這個命令來讓伺服器程序從正常的途徑推出,而不是強制退出。

 寫了個小程式模擬這個過程:

#include<stdio.h>
#include<unistd.h>
#include <signal.h>

void SignalHandler(int signal)
{

      //g_server.stop ,在這裡設定讓伺服器推出, 可以在stop的腳本里寫上 kill -USR1 $pid;

        printf("Signal = %d\n",signal);
        return ;
}

int main()
{
        signal(SIGUSR1, SignalHandler);
        while(true)
        {
                usleep(1000000);
//              printf("while...\n");
        }
        return 0;
}

一篇介紹kill命令的文章:
http://know.chinabyte.com/index.php?title=Linux%E5%91%BD%E4%BB%A4:Kill&redirect=no

其中是這麼介紹這個訊號的:

kill -USR1 1103kill 命令的名稱是一個誤導,因為許多訊號,包括 SIGUSR1,並不停止程序。發生在 SIGUSR1 訊號上的操作由正執行的特定的應用程式定義。注:要傳送訊號 15,或用這種形式的 kill 命令傳送 SIGTERM 訊號,必須明確地指定 -15 或 TERM。

BTW: 剛才測試的時候, 我用的是printf("Signal = %d",signal);

,這裡是沒換行的。所有我用kill 命令給程序發訊號的時候,是沒馬上看到輸出的;

但是加上  printf("while...\n");就可以看到上面的輸出了。 複習一下printf吧,printf是把資料寫到緩衝區的。