LInux实验二--进程间通信--信号

一、实验原理:

信号类似 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);
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风起晨曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值