Chinaunix首页 | 论坛 | 博客
  • 博客访问: 246183
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 273
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-27 23:34
个人简介

To follow the path,look to the master,follow the master.

文章分类

全部博文(35)

文章存档

2019年(1)

2018年(1)

2017年(1)

2016年(8)

2015年(24)

分类: LINUX

2016-01-08 09:59:02

父进程设置信号处理方式,创建的子进程也继承该信号处理方式

点击(此处)折叠或打开

  1. #include "../apue.h"
  2. int flags=1;
  3. void sig_usr1(int signum)
  4. {
  5.     printf("[%s]pid=%d\n", __FUNCTION__, getpid());
  6. }
  7. void sig_usr2(int signum)
  8. {
  9.     printf("[%s]pid=%d\n", __FUNCTION__, getpid());
  10.     flags=0;//改变全局变量
  11. }
  12. int main()
  13. {
  14.     pid_t pid;
  15.     int i=0;
  16.     //父进程设置信号处理方式,创建的子进程也继承该信号处理方式
  17.     signal(SIGUSR1, sig_usr1);//设置 SIGUSR1 执行函数
  18.     signal(SIGUSR2, sig_usr2);//SIGUSR2

  19.     pid=fork();
  20.     if(pid<0)
  21.     {
  22.         show_err("fork");
  23.     }
  24.     if(pid==0)
  25.     {
  26.         while(flags==1)
  27.         {
  28.             printf("pid=%d ppid=%d\n", getpid(), getppid());
  29.             sleep(1);
  30.         }
  31.         exit(10);
  32.     }
  33.     else
  34.     {    
  35.         //for(i=0; i<20; i++)
  36.         sleep(5);
  37.         kill(pid, SIGUSR2);//向子进程发送SIGUSR2 信号
  38.         //kill(pid, SIGUSR1);
  39.         printf("pid=%d ppid=%d\n", getpid(), getppid());
  40.         wait(NULL);//等待子进程收尸
  41.         printf("over\n");
  42.         exit(0);
  43.     }
  44. }
执行结果如下
[root@bogon 04_signal]# ./exe
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2850 ppid=2776
[sig_usr2]pid=2851
over


阅读(2049) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~