牛骨文教育服务平台(让学习变的简单)
博文笔记

Kill 不只是kill,也可发信号给自己的进程

创建时间:2011-08-31 投稿人: 浏览次数:4725

今天在看服务器的启动和停止脚本时,看到这样一个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是把数据写到缓冲区的。


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。