【八】 进程间通信——(SIGNAL)信号

【八】  进程间通信——(SIGNAL)信号

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>

pid_t pid;

void conductor(int signo)
{
	switch ( signo )
	{
	case SIGINT :
		kill(getppid(), SIGUSR1);
		break;
	case SIGQUIT :
		kill(getppid(), SIGUSR2);
		break;
	case SIGUSR1 :
		printf("All get off the bus\n");
		exit(0);
	}

	return;
}

void driver(int signo)
{
	switch ( signo )
	{
	case SIGUSR1 :
		printf("gogogo\n");
		break;
	case SIGUSR2 :
		printf("stop the bus\n");
		break;
	case SIGTSTP :
		kill(pid, SIGUSR1);
		usleep(100000);
		exit(0);
	}

	return;
}
int main()
{

	if ((pid = fork()) < 0)
	{
		perror("fail to fork");
		exit(-1);
	}
	else if (pid == 0)  // conductor
	{
		signal(SIGINT, conductor);
		signal(SIGQUIT, conductor);
		signal(SIGUSR1, conductor);
		signal(SIGTSTP, SIG_IGN);
		while ( 1 )
		{
			pause();
		}
	}
	else  // driver
	{
		signal(SIGUSR1, driver);
		signal(SIGUSR2, driver);
		signal(SIGTSTP, driver);
		signal(SIGINT, SIG_IGN);
		signal(SIGQUIT, SIG_IGN);
		while ( 1 )
		{
			pause();
		}
	}

	return 0;
}


你可能感兴趣的:(【八】 进程间通信——(SIGNAL)信号)