#include <stdio.h>
#include <stdlib.h> //malloc
#include <unistd.h>
#include <signal.h>
#include <errno.h>
int g_mysign = 0;
void muNEfunc(int value) //我这个函数能够修改这个全局变量g_mysign的值
{
//.....其他处理代码
g_mysign = value;
//.....其他处理代码
}
//信号处理函数
void sig_usr(int signo)
{
//int tmpsign = g_mysign;
//muNEfunc(22); //因为一些实际需求必须要在sig_user这个信号处理函数里调用muNEfunc
//可重入函数:就是我们在信号处理函数中 调用它 是安全的;
//这里malloc,这是错用,不可重入函数不能用在信号处理函数中;
//int* p;
//p = (int *) malloc (sizeof(int)); //用了不可重入函数;
//free(p);
int myerrno = errno;
if(signo == SIGUSR1)
{
printf("收到了SIGUSR1信号!\n");
}
else if(signo == SIGUSR2)
{
printf("收到了SIGUSR2信号!\n");
}
else
{
printf("收到了未捕捉的信号%d!\n",signo);
}
//g_mysign = tmpsign;
errno = myerrno;
}
int main(int argc, char *const *argv)
{
//signal因为兼容性,可靠性等等一些历史问题;不建议使用(我们的策略,坚决不用),建议用sigaction()函数代替;
if(signal(SIGUSR1,sig_usr) == SIG_ERR) //系统函数,参数1:是个信号,参数2:是个函数指针,代表一个针对该信号的捕捉处理函数
{
printf("无法捕捉SIGUSR1信号!\n");
}
if(signal(SIGUSR2,sig_usr) == SIG_ERR)
{
printf("无法捕捉SIGUSR2信号!\n");
}
for(;;)
{
sleep(1); //休息1秒
printf("休息1秒\n");
muNEfunc(15);
printf("g_mysign=%d\n",g_mysign);
//拿g_mysign做一些其他用途;
}
printf("再见!\n");
return 0;
}
//ps -eo pid,ppid,sid,tty,pgrp,comm | grep -E 'bash|PID|Start.out'
//kill -10 pid