#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
pid_t pid;
void driver_handler(int signo) //司机的信号处理函数
{
if (signo == SIGUSR1)
printf("Let's go!\n");
if (signo == SIGUSR2)
printf("Stop the bus!\n");
if (signo == SIGTSTP)
kill(pid, SIGUSR1);
}
void conductor_handler(int signo) //售票员的信号处理函数
{
if (signo == SIGINT)
kill(getppid(), SIGUSR1);
if (signo == SIGQUIT)
kill(getppid(), SIGUSR2);
if (signo == SIGUSR1)
{
printf("Please get off the bus!\n");
kill(getppid(), SIGKILL);
exit(0);
}
}
int main()
{
if ((pid = fork()) == -1)
{
perror("fork");
exit(-1);
}
if (pid == 0)//conductor
{
signal(SIGINT,conductor_handler);
signal(SIGQUIT,conductor_handler);
signal(SIGUSR1,conductor_handler);
signal(SIGTSTP, SIG_IGN);
}
else//driver
{
signal(SIGUSR1, driver_handler);
signal(SIGUSR2, driver_handler);
signal(SIGTSTP, driver_handler);
signal(SIGINT,SIG_IGN);
signal(SIGQUIT,SIG_IGN);
}
while (1);
return 0;
}