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
",signal);
return ;
}
int main()
{
signal(SIGUSR1, SignalHandler);
while(true)
{
usleep(1000000);
// printf("while...
");
}
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...
");就可以看到上面的输出了。 复习一下printf吧,printf是把数据写到缓冲区的。