【APUE】7、signal函数

来源:互联网 发布:sql注入测试工具汇总 编辑:程序博客网 时间:2024/06/05 20:58

我们进程结束的信号是TERM,注意这个信号我们要捕获的话,要注意退出程序,不然一般杀不掉这个程序,除非强制杀死

/** * 功能:一个简单的信号机制 * 时间:2015年12月20日16:49:06 * 作者:cutter_point */#include "../util/apue.h"#include "../util/error.c"static void sig_usr(int);//这个函数用来处理我们的信号机制static void sig_term(int);//这个函数用来处理我们的信号机制,终止信号int main(int argc, char *argv[]){if(signal(SIGUSR1, sig_usr) == SIG_ERR)err_sys("无法捕获信号SIGUSR1");if(signal(SIGUSR2, sig_usr) == SIG_ERR)err_sys("无法捕获信号SIGUSR2");if(signal(SIGTERM, sig_term) == SIG_ERR)err_sys("无法捕获信号SIGTERM");while(1)pause();}static void sig_usr(int signo)//这个函数用来处理我们的信号机制{if(signo == SIGUSR1)printf("收到SIGUSR1信号\n");else if(signo == SIGUSR2)printf("收到SIGUSR2信号\n");elseerr_dump("received signal %d\n", signo);}static void sig_term(int signo)//这个函数用来处理我们的信号机制,终止信号{if(signo == SIGTERM)printf("终止信号收到SIGTERM");elseerr_dump("未知信号!!received signal %d\n", signo);exit(0);}

结果:



注意,函数

static void sig_term(int signo)<span style="white-space:pre"></span>//这个函数用来处理我们的信号机制,终止信号{<span style="white-space:pre"></span>if(signo == SIGTERM)<span style="white-space:pre"></span>printf("终止信号收到SIGTERM");<span style="white-space:pre"></span>else<span style="white-space:pre"></span>err_dump("未知信号!!received signal %d\n", signo);<span style="white-space:pre"></span>exit(0);<span style="white-space:pre"></span>//注意}

中有一个exit,这个是要加的,如果不加的结果!!!



我们注意到,这个进程并没有结束,所以注意要加上exit才可以,不然只能强制结束进程。








0 0
原创粉丝点击