父子进程间信号通信

来源:互联网 发布:二手车出险查询软件 编辑:程序博客网 时间:2024/04/19 12:42

//司机售票员问题

 创建子进程代表售票员,父进程代表司机,同步过程如下:

 售票员捕捉SIGINT(代表开车),发SIGUSR1给司机,司机打印(“let's gogogo”)

 售票员捕捉SIGIQUIT(代表停车),发SIGUSR2给司机,司机打印(“stop the bus”)

 司机捕捉SIGTSTP(代表车到站),发SIGUSR1给售票员,售票员打印(“please get off the bus”)



#include<stdio.h>
#include<signal.h>
#include<unistd.h>



int pidparent=0,pidchild=0;

void deal1()
{
   printf("1\n");
   kill(pidchild,SIGUSR1);
}

void deal2()
{
   printf("2\n");
   printf("let's gogogo\n");
}

void deal3()
{
   printf("3\n");
   printf("stop the bus\n");
}

void deal4()
{
   printf("4\n");
   kill(pidparent,SIGUSR1);
}

void deal5()
{
   printf("5\n");
   kill(pidparent,SIGUSR2);
}


void deal6()
{
   printf("6\n");
   printf("please get off the bus\n");
}


 main()
{
//    int pidparent,pidchild;



    while((pidchild=fork())==-1);
    if(pidchild>0)
    {
      signal(SIGTSTP,deal1);
      signal(SIGUSR1,deal2);
      signal(SIGUSR2,deal3);
      signal(SIGINT,SIG_IGN);
      signal(SIGQUIT,SIG_IGN);
      pause();
      wait();
      exit(0);
     }
   else if(pidchild==0)
   {
      pidparent=getppid();
      signal(SIGINT,deal4);
      signal(SIGQUIT,deal5);
      signal(SIGUSR1,deal6);
      signal(SIGTSTP,SIG_IGN);
      pause();
      pause();
      pause();
    //  exit(0);
   }
   
}
原创粉丝点击