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