进程通信(2) ----- 信号

news2025/1/17 6:14:14

文章目录

  • 一、实验目的
  • 二、实验内容
  • 三、实验要求
  • 四、实验步骤及操作
  • 五、程序源码
    • 1. 信号发送 fkill.c
    • 2. 信号监控 mysignal.c


一、实验目的

1.了解进程通信间的信号机制
2.掌握进程通信间的信号编程模型

二、实验内容

信号是通信量最小的一种进程间通信形式,也用于内核与进程间的通信,信号是软件中断,它传递异步信号。本次实验内容如下:
1.使用kill函数杀死另一进程
2.信号的处理
3.阻塞信号
4.检测挂起的信号,设置信号处理程序

三、实验要求

实验需提前准备一台PC机,并在PC机上搭建Linux Ubuntu环境。

四、实验步骤及操作

1.打开Linux系统,新建终端
2.新建文件
3.编写代码
4.编译运行

五、程序源码

1. 信号发送 fkill.c

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

int main(void)
{
     pid_t child;
     int errret;
 
     if((child = fork()) < 0) {
	    perror("fork");
	    exit(EXIT_FAILURE);
     } else if(child == 0) {	/* in the child process */
	    sleep(30);//使当前进程睡眠30s
     } else {			/* in the parent */
	    /* 发送一个被忽略的信号 */
	    printf("sending SIGCHLD to %d\n", child);//SIGCHLD标识子进程停止或结束的信号
	    errret = kill(child, SIGCHLD);    //向child进程号发送SIGCHLD信号 
	    if(errret < 0)
	       perror("kill:SIGCHLD");
	    else
	       printf("%d still alive\n", child);

	    /* now murder the child */
	    printf("killing %d\n", child);
	    if((kill(child, SIGTERM)) < 0)//SIGTERM是kill发送的软件结束信号
	       perror("kill:SIGTERM");
	    /* have to wait to reap the status */
	    waitpid(child, NULL, 0 );   //回收子进程 
     }
     exit(EXIT_SUCCESS);
}

在这里插入图片描述

2. 信号监控 mysignal.c

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void my_func(int sign_no)
{
	if(sign_no==SIGINT)    //程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程
		printf("I have get SIGINT\n");
	else if(sign_no==SIGQUIT)
		printf("I have get SIGQUIT\n"); //SIGQUIT 信号对应的 signo = 03,表示用户从键盘按下quit键,即 ctrl+\ ,
		                                //进程在收到 SIGQUIT 退出时会产生 core 文件,在这个意义上类似于一个程序错误信号。
}
int main()
{
	printf("Waiting for signal SIGINT or SIGQUIT \n ");
	signal(SIGINT, my_func);      //参数一:处理信号   参数二:处理方式 
	signal(SIGQUIT, my_func);
	pause();   //令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断
	exit(0);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Gradle】三、深入了解Gradle

这里写目录标题一、 Gradle项目的生命周期Initialization 阶段Configuration 阶段&#xff1a;Execution 阶段&#xff1a;二、settings.gradle 文件三、Task1、 案例四、Dependencies1、依赖的分类2、依赖的下载3、依赖的类型4、api与implementation的区别5、依赖冲突及解决方…

(二) Docker安装

Docker安装一、前提二、安装三、设置阿里云镜像加速四、分析Run底层原理五、Docker会比VM虚拟机快的原因一、前提 CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上&#xff0c; 要求系统为64位、Linux系统内核版本为 3.8以上&#xff0c;这里选用Cen…

plot3D | 三维数据绘图(1):散点图、栅格图、透视图

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集plot3D可以视作基础包graphcis的拓展包&#xff0c;用于多维数据的图形绘制。基础绘图系统里好像只有一个persp()函数与三维绘图有关&#xff0c;关于该函数的介绍见如下推文&#xff1a;基础绘图系统&#xff08;…

【Hack The Box】linux练习-- Blunder

HTB 学习笔记 【Hack The Box】linux练习-- Blunder &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月21日&#x1f334; &#x1f…

二、Robot Framework 对数据库的操作

Robot Framework 对数据库的操作2.1 DatabaseLibrary 库的使用1. 安装 DatabaseLibrary 库2. 测试套件中导入 DatabaseLibrary 库3. 安装 pure-PythonMySQL client library2.1.1 如何连接数据库2.1.2 如何断开数据库2.1.3 如何对数据库的表进行查询2.1.4 如何插入和删除数据2.1…

java EE初阶 — Thread类及常见方法

文章目录1.Thread 常见的构造方法2.Thread 几个常见的属性3.启动一个线程 - start()4.终止一个线程4.1 使用标志位来控制线程是否要停止4.2 使用 Thread 自带的标志位来进行判定5.等待一个线程 - join()6.获取当前线程引用7.休眠当前线程1.Thread 常见的构造方法 Thread() - 创…

【Spring】——11、了解BeanPostProcessor后置处理器

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

Packet Tracer - 综合技能练习(通过调整 OSPF 计时器来修改 OSPFv2 配置)

地址分配表 设备 接口 IP 地址 子网掩码 RA G0/0 192.168.1.1 255.255.255.0 RB G0/0 192.168.1.2 255.255.255.0 RC G0/0 192.168.1.3 255.255.255.0 S0/0/0 209.165.200.225 255.255.255.252 拓扑图 场景 在此综合技能练习中&#xff0c;您的重点是 OSPF…

【滤波跟踪】不变扩展卡尔曼滤波器对装有惯性导航系统和全球定位系统IMU+GPS进行滤波跟踪【含Matlab源码 2232期】

⛄一、简介 针对室内定位中的非视距&#xff08;Non-Line-of-Sight,NLOS&#xff09;现象,提出一个新型算法进行识别,同时有效缓解其影响.主要通过超宽带&#xff08;Ultra-Wideband,UWB&#xff09;定位系统与惯性导航系统&#xff08;Inertial Navigation System,INS&#x…

车辆大全和车牌识别系统毕业设计,车牌识别系统设计与实现,车牌AI识别系统论文毕设作品参考

功能清单 【后台管理员功能】 系统设置&#xff1a;设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&a…

发布MagicOS 7.0, 荣耀如何打造“松弛感”的操作系统?

最近&#xff0c;“松弛感”一词特别流行。有博主教网友如何打造松弛感美女&#xff0c;因为这种毫不费力、天然去雕饰的美&#xff0c;更有吸引力&#xff1b;职场松弛感&#xff0c;能够平衡工作和生活&#xff0c;更被同事们喜欢&#xff1b;生活也需要多一些松弛感&#xf…

C. Doremy‘s City Construction(思维)

Problem - C - Codeforces Doremy的新城市正在建设中! 这个城市可以被看作是一个有n个顶点的简单无向图。第i个顶点的高度为ai。现在&#xff0c;多雷米正在决定哪些顶点对应该用边连接。 由于经济原因&#xff0c;图中不应该有自循环或多条边。 由于安全原因&#xff0c;不应…

mybatis基础01

一、安装mybatis 要使用 MyBatis&#xff0c; 只需将 mybatis-x.x.x.jar 文件置于类路径&#xff08;classpath&#xff09;中即可。 如果使用 Maven 来构建项目&#xff0c;则需将下面的依赖代码置于 pom.xml 文件中&#xff1a; <dependency><groupId>org.mybat…

贺利坚汇编语言课程笔记 绪论

贺利坚汇编语言课程笔记 绪论 又是女娲补天式地从零开始两周零基础冲击六十分… 文章目录贺利坚汇编语言课程笔记 绪论一.Why should we learn Assembly language&#xff1f;二.从机器语言到汇编语言三.计算机组成指令和数据的表示计算机中的存储单元计算机中的总线x86CPU性能…

Java日期时间的前世今生

&#x1f649; 作者简介&#xff1a; 全栈领域新星创作者 &#xff1b;天天被业务折腾得死去活来的同时依然保有对各项技术热忱的追求&#xff0c;把分享变成一种习惯&#xff0c;再小的帆也能远航。 &#x1f3e1; 个人主页&#xff1a;xiezhr的个人主页 前言 日常开发中&…

gitpod.io,云端开发调试工具。

gitpod&#xff0c;一款在线开发调试工具&#xff0c;使用它你可以在网页上直接开发软件项目了。 比如你的项目仓库在github上&#xff0c;你可以直接在网址的前面添加gitpod.io/#&#xff0c;然后回车就能在网页上使用vscode打开这个项目了。 打开的效果&#xff1a; 可以安装…

ZZULIOJ 2066: 带分数

ZZULIOJ 2066: 带分数 题意&#xff1a; 给定一个数NNN&#xff0c;问有多少组a,b,ca,b,ca,b,c满足abcNa\dfrac bcNacb​N&#xff0c;且a,b,ca,b,ca,b,c三个数不重不漏地涵盖1−91-91−9这999个数字&#xff0c;输出总组数 解题思路&#xff1a; 暴力枚举出999个数的全排列…

sql数据库入门(1)

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>: 本篇记录一下牛牛在学校学习的sql serve数据库知识,内…

学了PS了还用学习AI吗,有什么区别

AdobeIllustrator和AdobePhotoshop它是目前市场上设计师使用最广泛的两种软件。很多刚接触的同学会发现&#xff0c;两者都可以达到一些效果&#xff0c;导致一种错觉&#xff0c;认为任何人都可以使用&#xff0c;所以他们可以随意使用。 虽然在PS和Ai它确实可以用来做类似的…

顶刊示例-经济研究数据-全国、省、市-城市人均收入、农村人均收入面板数据

&#xff08;1&#xff09;全国城乡居民人均收入 1、数据来源&#xff1a;中国统计年鉴 2、时间跨度&#xff1a;1978-2020 3、区域范围&#xff1a;国家 4、指标说明&#xff1a; 包含如下指标&#xff1a; 全国居民人均可支配收入 城镇居民人均可支配收入 农村居民人均…