我们进程结束的信号是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");
else
err_dump("received signal %d\n", signo);
}
static void sig_term(int signo) //这个函数用来处理我们的信号机制,终止信号
{
if(signo == SIGTERM)
printf("终止信号收到SIGTERM");
else
err_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才可以,不然只能强制结束进程。