一、实验原理:
信号类似 windows 下的消息,用于通知进程有某种事件发生。只要知道进程的进
程号,就可以向进程发送信号。而进程可以自行定义对信号的处理方法。
二、实验内容:
实例一:编写实例,让子进程在启动2s后杀死父进程
//kill.c
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t parent, child;
parent = getpid();
child = fork();
if(child < 0)
{
printf("fork error \n");
return(1);
}
else if(child == 0)
{
printf("child run : child_pid = %d \n",getpid());
usleep(2000000);
printf("Kill parent process\n");
kill(parent,SIGKILL);
usleep(2000000);
}
else if(child > 0)
{
printf("parent run : parent_pid = %d \n",parent);
while(1);
}
}
运行结果:
实例二:编写信号处理通信实例
//Signal.c
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void myfunc(int signo)
{
if(signo == SIGINT)
fprintf(stdout,"We catch the SIGINT signal\n");
else if(signo == SIGALRM)
fprintf(stdout,"We catch the SIGALRM signal\n");
}
int main()
{
pid_t pid = getpid();
fprintf(stdout,"pid = %d ,Waiting for signal SIGINT or SIGALRM\n",pid);
//设置SIGINT信号的处理函数
signal(SIGINT ,myfunc);
//设置SIGALRM信号的处理函数
signal(SIGALRM,myfunc);
//设置闹钟信号
alarm(10);
pause();
exit(0);
}
运行结果: