sigprocmask sigaction

sigprocmask sigaction sigprocmask:用于随时添加信号屏蔽字;sigaction :signal增强版本,当处理信号时,可以随意添加信号屏蔽字sigset_tnewmask,oldmask,pendmask;signal(SIGINT,sig_handler);sigemptyset(&newmask);sigaddset(&…

大家好,又见面了,我是你们的朋友全栈君。

 

sigprocmask: 用于随时添加信号屏蔽字 ;

sigaction  : signal增强版本, 当处理信号时, 可以随意添加信号屏蔽字

   

   sigset_t newmask,oldmask,pendmask;
   signal(SIGINT,sig_handler);
   sigemptyset(&newmask);
   sigaddset(&newmask,SIGINT);

   //屏蔽SIGINT 
   sigprocmask(SIG_BLOCK,&newmask,&oldmask);
   //按ctrl+c
   for(int i =0 ; i < 3 ; ++i){
       sleep(1);
       write(1,".",1);
   }
  //SIGINT 是否置位
   sigpending(&pendmask);
   printf("pend sigint ?  %d\n",sigismember(&pendmask,SIGINT));
   puts("restore mask");
 //还原
   sigprocmask(SIG_SETMASK,&oldmask,NULL);
   puts("sigint unlock");

    while(1){
        sleep(1);
        write(1,".",1);
    }
void sig_handler(int sig,siginfo_t * info, void *p){

    printf("self pid:%d, send pid:%d , val:%d\n", getpid(),
    info->si_pid,info->si_value.sival_int);
}
int main(int argc , char ** argv , char ** env)
{
   struct sigaction act,oact;
   sigemptyset(&act.sa_mask);
   act.sa_flags =SA_SIGINFO;
   act.sa_sigaction = sig_handler;
   //act.sa_mask 用于屏蔽信号,当 sig_handler 被处理时
   sigaction(SIGUSR2,&act,&oact);
   pid_t  pid = getpid();
   printf("parent : %d\n", pid);
   if(fork() == 0){
            //子进程继承父进程 sigaction
            union  sigval v = {0};
            v.sival_int = 1000;
            pid_t pid = getpid();
            printf("child pid:%d sending sig\n", pid);
            sigqueue(getppid(),SIGUSR2,v);
            raise(SIGUSR2);

            for(int i = 0; i < 3; ++i){
                sleep(1);
                write(1,"b",1);
            }
            exit(0);
   }
   while(1){
       write(1,".",1);
       sleep(1);
   }





    return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141368.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号