信号与进程间通信

news2024/11/27 12:28:40

目录

  • 结束进程
    • 结束后台进程
    • 结束前台进程
  • 信号
    • 基本概念
      • 接收信号
      • 发送信号
  • 代码演示
    • 接收信号函数(signal)
      • SIG_IGN
      • SIG_DFL
      • 自定义函数
    • 发送信号(kill)
    • 接收信号解决僵尸进程

结束进程

结束后台进程

终端1:./main killed
终端2:ps -ef |grep “main” 该命令找到进程的PID,使用命令kill +进程号删除该进程。在这里插入图片描述

结束前台进程

Ctrl + c :向终端发送一个信号 中断

信号

基本概念

接收信号

signal()函数
我们结束前台进程使用的Ctrl+c就是使用了信号进行强制退出。
信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。
与信号有关的系统调用在“signal.h”头文件中有声明
信号的值在系统源码中的定义如下:

  1. #define SIGHUP 1
  2. #define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号
  3. #define SIGQUIT 3
  4. #define SIGILL 4
  5. #define SIGTRAP 5
  6. #define SIGABRT 6
  7. #define SIGIOT 6
  8. #define SIGBUS 7
  9. #define SIGFPE 8
  10. #define SIGKILL 9 //该信号的响应方式不允许改变
  11. #define SIGUSR1 10
  12. #define SIGSEGV 11
  13. #define SIGUSR2 12
  14. #define SIGPIPE 13 //读端关闭的描述符,写端写入时产生,该信号会终止程序
  15. #define SIGALRM 14
  16. #define SIGTERM 15 //系统 kill 命令默认发送的信号
  17. #define SIGSTKFLT 16
  18. #define SIGCHLD 17 //子进程结束后,会默认给父进程发送该信号
  19. #define SIGCONT 18
  20. #define SIGSTOP 19
  21. #define SIGTSTP 20
  22. #define SIGTTIN 21
  23. #define SIGTTOU 22
  24. #define SIGURG 23

参数:
在这里插入图片描述

发送信号

kill()发送命令函数
kill() 可以向指定的进程发送指定的信号:
int kill(pid_t pid, int sig);
pid > 0 指定将信号发送个那个进程
pid == 0 信号被发送到和当前进程在同一个进程组的进程
pid == -1 将信号发送给系统上有权限发送的所有的进程
pid < -1 将信号发送给进程组 id 等于 pid 绝对值,并且有权限发送的所有的进程。 sig 指定发送信号的类型。
在这里插入图片描述

代码演示

接收信号函数(signal)

SIG_IGN

int main(){
	signal(SIGINT,SIG_IGN);
	while(1){
		printf("main over!!\n");
		sleep(2);
	}
	exit(0);
}

以上代码运行结果如下图,我们使用Ctrl+c无法进行退出,因为我们约定收到这个信号忽略这个信号。因此退出可以使用Ctrl+\。
在这里插入图片描述

SIG_DFL

int main(){
	signal(SIGINT,SIG_DFL);
	while(1){
		printf("main over!!\n");
		sleep(2);
	}
	exit(0);
}

SIG_DFL参数是约定按默认操作进行执行。使用Ctrl+c可以直接退出。
在这里插入图片描述

自定义函数

在这里插入图片描述
该函数我们是约定接收到命令之后调用fun函数使用,我们可以发现使用该函数,第一次接收到信号之后会执行输出命令,第二次接收命令之后会默认操作。
在这里插入图片描述

发送信号(kill)

int main(int argc,char* argv[]){
	if(argc!=2){
		printf("argc error\n");
		exit(1);
	}
	//int pid=atoi(argv[1]);
	int pid;
	sscanf(argv[1],"%d",&pid);
	if(kill(pid,SIGINT)==-1){
		perror("kill error");
		exit(1);
	}
	exit(0);
}

我们使用main函数的参数调用进程的PID作为参数,然后使用sscanf函数讲字符串转换为整型,调用kill函数时使用SIGINT参数是同Ctrl+c相同的信号,所以会直接退出。
在这里插入图片描述
以上代码我们也可以做一修改,将信号作为参数使用,进行改变,如下
在这里插入图片描述

执行结果:在这里插入图片描述

接收信号解决僵尸进程

解决僵尸进程如下代码,使用的SIGCHLD参数是子进程结束会默认向父进程传递该信号,执行fun命令,wait(NULL)

执行结果如下:在这里插入图片描述
该方法比较于直接在函数父进程的if条件下等待优点是不需要等待子进程运行结束之后才能运行父进程。同时运行,子进程结束会自动发送信号接收子进程的退出码来解决僵尸进程。

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

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

相关文章

Linux系统编程(五)——Linux下的多线程

目录 0x01 线程概述 一、线程和进程的区别 二、线程和进程的虚拟地址空间 三、线程之间共享的非共享资源 四、NPTL 0x02 创建线程 0x03 终止线程 0x04 连接已终止的进程 0x05 线程的分离 0x06 线程取消 0x07 线程属性 0x08 线程同步 一、互斥锁 二、死锁 三、如何…

三肽Gly-Cys-Gly、88440-55-5

三肽Gly-Cys-Gly 编号&#xff1a;111774 CAS号&#xff1a;88440-55-5 三字母&#xff1a;H2N-Gly-Cys-Gly-COOH 描 述&#xff1a;羧肽酶 U 抑制剂&#xff08;凝血酶可激活的纤维蛋白溶解抑制剂&#xff0c;TAFI&#xff09;&#xff0c;Ki 0.14 μM。编号: 111774 中文名称…

Java#29(集合进阶2---双列集合)

目录 一.Map------------双列集合-----------一次添加一对元素,如: 小明 99岁 1.特点: 2.Map中常见的API 3.Map集合的遍历方式 4.HashMap 5.LinkedHashMap 6.TreeMap 一.Map------------双列集合-----------一次添加一对元素,如: 小明 99岁 1.特点: (1)双列集合一次需要…

在嵌入式里面实现printf()类似的功能

学习C语言大多数都是从printf("hello world")开始的&#xff0c;对于printf的熟悉程度最高&#xff0c;在嵌入式编程中&#xff0c;实现printf函数有一种很标准的办法就是实现putch&#xff0c;绑定对应的串口输出&#xff0c;设置好波特率&#xff0c;使能串口就可以…

No module named ‘PyQt5.QtWebEngineWidgets‘kn-----已解决

1.情况说明 本人在学习PyQt5的时候遇到了 from PyQt5.QtWebEngineWidgets import * 报错的情况&#xff0c;原因就是ModuleNotFoundError: No module named PyQt5.QtWebEngineWidgets 没有PyQt5.QtWebEngineWidgets&#xff0c; 2.解决办法&#xff1a; 解决办法一&#xf…

最快最便捷的pytest使用allure测试报告

一、前言 最近通过群友了解到了allure这个报告&#xff0c;开始还不以为然&#xff0c;但还是逃不过真香定律。 经过试用之后&#xff0c;发现这个报告真的很好&#xff0c;很适合自动化测试结果的展示。下面说说我的探索历程吧。 选用的项目为Selenium自动化测试Pytest框架…

Day1使用Burpsuite抓包工具抓包,改变UA头使得手机和pc端界面互相转换

1.前期工作&#xff1a;安装Burpsuite工具这里网上有许多教程&#xff0c;大致步骤如下&#xff1a; 找到安装包然后解压缩&#xff0c;然后双击 安装jdk&#xff0c;然后就是配置环境变量&#xff0c;如果是默认jdk安装路径没有更改路径的话就是跟如下一样 配置如下&#xff…

跨平台开发方案的三个时代

跨平台开发从本质上讲是为了增加业务代码的复用率&#xff0c;减少因为要适配多个平台带来的工作量&#xff0c;从而降低开发成本。在提高业务专注度的同时&#xff0c;能够为用户提供一致的用户体验&#xff0c;实现“多快好省”的效果。 跨平台是跨哪些平台&#xff1f;怎么…

高视医疗在港交所招股:IPO募资要用于贷款,高铁塔为控股股东

11月30日&#xff0c;高视医疗&#xff08;HK:02407&#xff09;在港交所发布公告&#xff0c;拟全球发售1306.86万股股份&#xff0c;其中香港发售股份130.7万股&#xff0c;国际发售股份1176.16万股&#xff0c;另有15%超额配股权&#xff0c;于2022年11月30日至12月5日招股&…

Talk预告 | 亚马逊云科技上海人工智能研究院肖天骏:基于视频的自监督物体遮挡补全分割

本期为TechBeat人工智能社区第458期线上Talk&#xff01; 北京时间11月30日(周三)20:00&#xff0c;亚马逊云科技上海人工智能研究院资深应用科学家——肖天骏的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “基于视频的自监督物体遮挡补全分割”…

请求和响应

目录1 请求对象1.1 请求对象介绍1.2 请求对象常用方法-获取各自路径1.3 请求对象常用方法-获取请求头信息1.4 请求对象常用方法-请求参数信息1.5 获取请求参数并封装对象1.5.1 手动封装方式1.5.2 反射封装方式1.5.3 工具类封装方式1.6 流对象获取请求信息1.7 中文乱码问题1.8 请…

可发生点击化学反应:1458576-00-5,Biotin-PEG4-alkyne,生物素-四聚乙二醇-炔

【中文名称】生物素-四聚乙二醇-炔&#xff0c;生物素-四聚乙二醇-丙炔基 【英文名称】 Biotin-PEG4-alkyne 【货号】Y-PE-2172 【CAS】1458576-00-5 【分子式】C21H35N3O6S 【分子量】457.58 【基团】alkyne 【纯度】95% 【规格】25mg&#xff0c;100mg&#xff0c;250mg 【是…

如何应对继承的双面性

如何应对继承的双面性 继承既强大又有破坏性&#xff0c;那怎么办呢&#xff1f; 1&#xff09;避免使用继承&#xff1b; 2&#xff09;正确使用继承。 我们先来看怎么避免继承&#xff0c;有三种方法&#xff1a; 使用final关键字&#xff1b; 优先使用组合而非继承&#…

11月30日:linux服务器安装以及部署项目

准备一个连接linux服务器的可视化工具&#xff0c;开始发车 推荐使用国产&#xff1a; finalshell 下载地址&#xff1a;FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本3.9.7,更新时间2022.10.26 - SSH工具 SSH客户端 xshell&#xff1a;安装…

Spring Cloud Gateway微服务网关快速入门

介绍 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等技术开发的网关&#xff0c;Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态…

Kamiya丨Kamiya艾美捷人乳铁蛋白ELISA说明书

Kamiya艾美捷人乳铁蛋白ELISA预期用途&#xff1a; 人乳铁蛋白ELISA是一种高度灵敏的双位点酶联免疫测定&#xff08;ELISA&#xff09;人类生物样品中乳铁蛋白的测定。仅供研究使用。不用于诊断程序。 引言 乳铁蛋白&#xff08;LF&#xff09;是一种具有抗菌活性的多功能铁…

运动“双十一”持续走热,缤跃酒店洞察市场需求,创新打造运动健康酒店!

2022年“双十一”购物促销活动刚刚结束&#xff0c;各大品牌陆续开始展示肌肉&#xff0c;在众多数据中运动健身领域相关数据不容忽视&#xff0c;居家健身器械等商品持续走热&#xff0c;户外运动设备销售量也保持热度。由此可见&#xff0c;在当下全民运动热潮下&#xff0c;…

uniapp开发微信小程序实现语音识别,使用微信同声传译插件,

第一步&#xff1a;在微信小程序管理后台&#xff1a;“设置”-》“第三方设置”-》“插件管理”中添加插件。 但是这个地方&#xff0c;没有搜索到插件&#xff0c;就到微信服务市场 搜索到以后添加到需要的小程序里面&#xff0c;然后返回管理中心查看&#xff0c;就可以看…

Css3 3D转换

特点&#xff1a; 近大远小物体后面遮挡不可见 三维坐标系&#xff1a; 三维坐标系其实就是指立体空间&#xff0c;立体空间是由3个轴共同组成的。 X轴&#xff1a;水平向右为正 Y轴&#xff1a;垂直向下为正 Z轴&#xff1a;垂直屏幕向外为正 3D位移和3D旋转&#xff1a…

曲柄压力机的离合器和制动系统设计

目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1压力机发展的概况 1 1.2压力机工作原理 1 1.2.1压力机功能简介 1 1.2.2压力机的工作原理简介 3 1.3 压力机的分类 3 1.4 压力机的主要参数和型号 4 1.5本次设计压力机参数及内容 6 1.5.1主要技术参数 6 1.5.2设计内容 6 第二章 曲柄…