1. 程式人生 > >通過訊號量進行程序通訊的小例子

通過訊號量進行程序通訊的小例子

如果我們需要完成以下的要求

在main函式中建立一個子程序實現通訊:利用訊號實現程序通訊。

父程序任務:迴圈列印“I am  father process!,I  am waiting for signal,My PID is ......”。要求把自己的程序號同時打印出來,父程序同時還等待發來的SIGINT訊號和SIGKILL訊號,當第一次收到SIGINT訊號時,列印“I have received SIGINT signal”,但此時不退出,繼續迴圈執行;當收到子程序利用kill函式發來的SIGKILL訊號時,則終止程序。

子程序任務:迴圈列印“I am  son process !”。5秒鐘之後,子程序向父程序利用kill函式傳送SIGKILL訊號。在此期間,若父程序收到SIGINT訊號,則列印“I have received SIGINT signal”。

則所需要的程式程式碼如下

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

int pid;
void ouch1(int sig)
{
	kill(pid,SIGKILL);
	alarm(5);
}

void ouch2(int sig)
{
	printf("I recived SIGINT\n");
}

void ouch3(int sig)
{

}

void main()
{
	int n,fd[2];
	
	int i;


	if (pipe(fd) < 0)
		return 1;
	if ((pid=fork()) < 0)
		return 1;
	else if (pid == 0)	//ZI程序
	{
		alarm(5);	
		signal(SIGALRM, ouch1);
		signal(SIGINT,ouch2);
		while(1)
		{		
			printf("I am son process !\n");
			sleep(1);
		}
	}
	else	//FU程序
	{
		signal(SIGINT,ouch2);
		signal(SIGKILL,SIG_DFL);
		while(1)
		{
		printf("I am  father process!,I  am waiting for signal,My PID is %d\n",getpid());
		sleep(2);
		}
	}