找回密码
 立即注册
首页 资源区 代码 信号练习

信号练习

宓碧莹 2025-5-29 10:52:05
  1. /*******************************************************************************
  2. *
  3. * 设计两个程序,A执行死循环,B程序给发送一个结束信号给程序A,当程序A接收到信号之后则执行相应的任务。
  4. * author:jindouliu2024@163.com
  5. * date:2025.5.8
  6. * Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
  7. *
  8. * *****************************************************************************/
复制代码
  1. //程序A
  2. #include<stdio.h>
  3. #include<signal.h>
  4. //信号处理函数
  5. void sig_handler(int signal)
  6. {
  7.         //如果是接受到的信号是SIGUSR1,则执行
  8.         if(signal == SIGUSR1){
  9.                 printf("this is SIGUSR1\n");
  10.         }
  11.         //如果是接受到的信号是SIGUSR2,则执行
  12.         if(signal == SIGUSR2){
  13.                 printf("this is SIGUSR2\n");
  14.                
  15.         }
  16. }
  17. int main()
  18. {
  19.         printf("running\n");
  20.         signal(SIGUSR1,sig_handler);
  21.         signal(SIGUSR2,sig_handler);
  22.         while(1);
  23.         return 0;
  24. }
复制代码
  1. #include<stdio.h>
  2. #include<signal.h>
  3. int main(int argc,char *argv[])
  4. {
  5.         int id,data;
  6.         //获取进程id,在终端输入ps -ef命令
  7.         printf("请输入id:");
  8.         scanf("%d",&id);
  9.         while(1){
  10.                 //判断输入的数据,根据数据发送相应的信号
  11.                 printf("请输入user1 or user2:");
  12.                 scanf("%d",&data);
  13.                 if(data == 1){
  14.                         kill(id,SIGUSR1);
  15.                 }
  16.                 if(data == 2){
  17.                         kill(id,SIGUSR2);
  18.                 }
  19.         }
  20.        
  21.         return 0;
  22. }
复制代码
把快捷键Ctrl+C的对应信号进行阻塞,需要创建一个信号集,把该信号添加到信号集,对信号集属性进行设置(阻塞),然后测试发送该信号是否会被进程响应。
  1. #include<stdio.h>
  2. #include<signal.h>
  3. #include<string.h>
  4. #include<errno.h>
  5. int main(int argc,char *argv[])
  6. {
  7.         sigset_t arr;
  8.         //将Ctrl +c 加入到信号集
  9.         sigaddset(&arr,SIGINT);
  10.         //创建一个信号集并设置为阻塞特性
  11.         int flag = sigprocmask(SIG_BLOCK,&arr,NULL);
  12.         if(flag == -1){
  13.                 printf("sigprocmask error\n");
  14.                 return 1;
  15.         }
  16.         while(1);
  17.        
  18.        
  19.         return 0;
  20. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册