信号的“未决”是一种状态,指的是从信号的产生到信号被处理前的这一段时间;
信号的“阻塞”是一个开关动作,指的是阻止信号被处理,但不是阻止信 号产生
int signal1 (int signo,void (*func)(int))
{
struct sigaction act,oact;
act.sa_handler = func;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
return sigaction(signo,&act,&oact);
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
int status = 0;
void catch_signal (int sign)
{
switch(sign)
{
case SIGINT:
printf("SIG");
exit(0);
case SIGTERM:
printf("KILLED");
exit(0);
case SIGUSR1://用户信号:SIGUSR1和SIGUSR2
status = 1;
}
}
int main (int arg,char *args[])
{
signal(SIGINT,catch_signal);
signal(SIGKILL,catch_signal);
signal(SIGTERM,catch_signal);
signal(SIGUSR1,catch_signal);//注册函数
int i=0;
while(1)
{
if(status == 1)//通过消息来唤醒
printf("hello %d\n",i++);
sleep(1);
}
return 0;
}