如果我们需要完成以下的要求
在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 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);
}
}
}