位置: 编程技术 - 正文

Linux信号机制基础知识介绍(linux信号机制的原理)

编辑:rootadmin

推荐整理分享Linux信号机制基础知识介绍(linux信号机制的原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux信号的定义,linux信号机制的原理,linux 信号处理机制,linux 信号处理机制,linux信号机制的原理,linux信号机制的原理,linux中信号,linux 信号处理机制,内容如对您有帮助,希望把文章链接给更多的朋友!

Linux进程基础一文中已经提到,Linux以进程为单位来执行程序。我们可以将计算机看作一个大楼,内核(kernel)是大楼的管理员,进程是大楼的房客。每个进程拥有一个独立的房间(属于进程的内存空间),而每个房间都是不允许该进程之外的人进入。这样,每个进程都只专注于自己干的事情,而不考虑其他进程,同时也不让别的进程看到自己的房间内部。这对于每个进程来说是一种保护机制。(想像一下几百个进程总是要干涉对方,那会有多么混乱,或者几百个进程相互偷窥……)

然而,在一些情况,我们需要打破封闭的房间,以便和进程交流信息。比如说,内核发现有一个进程在砸墙(硬件错误),需要让进程意识到这样继续下去会毁了整个大楼。再比如说,我们想让多个进程之间合作。这样,我们就需要一定的通信方式。信号(signal)就是一种向进程传递信息的方式。我们可以将信号想象成大楼的管理员往房间的信箱里塞小纸条。随后进程取出小纸条,会根据纸条上的内容来采取一定的行动,比如灯坏了,提醒进程使用手电。(当然,也可以完全无视这张纸条,然而在失火这样紧急的状况下,无视信号不是个好的选择)。相对于其他的进程间通信方式(interprocess communication, 比如说pipe, shared memory)来说,信号所能传递的信息比较粗糙,只是一个整数。但正是由于传递的信息量少,信号也便于管理和使用。信号因此被经常地用于系统管理相关的任务,比如通知进程终结、中止或者恢复等等。

给我一个信号

信号是由内核(kernel)管理的。信号的产生方式多种多样,它可以是内核自身产生的,比如出现硬件错误(比如出现分母为0的除法运算,或者出现segmentation fault),内核需要通知某一进程;也可以是其它进程产生的,发送给内核,再由内核传递给目标进程。内核中针对每一个进程都有一个表存储相关信息(房间的信箱)。当内核需要将信号传递给某个进程时,就在该进程相对应的表中的适当位置写入信号(塞入纸条),这样,就生成(generate)了信号。当该进程执行系统调用时,在系统调用完成后退出内核时,都会顺便查看信箱里的信息。如果有信号,进程会执行对应该信号的操作(signal action, 也叫做信号处理signal disposition),此时叫做执行(deliver)信号。从信号的生成到信号的传递的时间,信号处于等待(pending)状态(纸条还没有被查看)。我们同样可以设计程序,让其生成的进程阻塞(block)某些信号,也就是让这些信号始终处于等待的状态,直到进程取消阻塞(unblock)或者无视信号。

常见信号

信号所传递的每一个整数都被赋予了特殊的意义,并有一个信号名对应该整数。常见的信号有SIGINT, SIGQUIT, SIGCONT, SIGTSTP, SIGALRM等。这些都是信号的名字。你可以通过复制代码代码如下:$man 7 signal来查阅更多的信号。

上面几个信号中,

SIGINT 当键盘按下CTRL+C从shell中发出信号,信号被传递给shell中前台运行的进程,对应该信号的默认操作是中断 (INTERRUPT) 该进程。

SIGQUIT 当键盘按下CTRL+从shell中发出信号,信号被传递给shell中前台运行的进程,对应该信号的默认操作是退出 (QUIT) 该进程。

SIGTSTP 当键盘按下CTRL+Z从shell中发出信号,信号被传递给shell中前台运行的进程,对应该信号的默认操作是暂停 (STOP) 该进程。

SIGCONT 用于通知暂停的进程继续。

Linux信号机制基础知识介绍(linux信号机制的原理)

SIGALRM 起到定时器的作用,通常是程序在一定的时间之后才生成该信号。

在shell中使用信号

下面我们实际应用一下信号。我们在shell中运行ping:复制代码代码如下:$ping localhost此时我们可以通过CTRL+Z来将SIGTSTP传递给该进程。shell中显示:复制代码代码如下:[1]+ Stopped ping localhost

我们使用$ps来查询ping进程的PID (PID是ping进程的房间号), 在我的机器中为

我们可以在shell中通过$kill命令来向某个进程发出信号:复制代码代码如下:$kill -SIGCONT 来传递SIGCONT信号给ping进程。

信号处理 (signal disposition)

在上面的例子中,所有的信号都采取了对应信号的默认操作。但这并不绝对。当进程决定执行信号的时候,有下面几种可能:

1) 无视(ignore)信号,信号被清除,进程本身不采取任何特殊的操作2) 默认(default)操作。每个信号对应有一定的默认操作。比如上面SIGCONT用于继续进程。3) 自定义操作。也叫做获取 (catch) 信号。执行进程中预设的对应于该信号的操作。

进程会采取哪种操作,要根据该进程的程序设计。特别是获取信号的情况,程序往往会设置一些比较长而复杂的操作(通常将这些操作放到一个函数中)。

信号常常被用于系统管理,所以它的内容相当庞杂。深入了解信号,需要一定的Linux环境编程知识。

总结

信号机制; generate, deliver, pending, blocking

signal action/dispositon; ignore, default action, catch signal

$kill

Linux硬盘分区注意事项 Partition与档案系统管理 本篇文章主要描述了Linux硬盘分区的过程,及其为何这样分区的原理。文件系统重点:inode(索引节点),block(逻辑区块),superblock(每个档案系统开

Linux进程间的关系详解 Linux的进程相互之间有一定的关系。比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构。我

VPS修改SSH登陆端口和禁止ROOT登陆 修改SSH登陆端口修改文件:/etc/ssh/sshd_configPort#在第三行或第四行,如果前面有井号,请删除,修改为以下即可可在远程连接中用vi命令,或sftp下载

标签: linux信号机制的原理

本文链接地址:https://www.jiuchutong.com/biancheng/353494.html 转载请保留说明!

上一篇:图解Linux系统的系统架构(linux系统的介绍)

下一篇:Linux硬盘分区注意事项 Partition与档案系统管理(linux系统硬盘分区)

  • 所得税的会计分录怎么做
  • 纳税检查调减进项税额主表怎么不显示缴纳税款
  • 向个人提供居住证明
  • 什么叫征期抄税?
  • 增值税专用发票抵扣最新规定
  • 什么是增值税征免年限
  • 计提坏账部分收入怎么算
  • 三证合一后税务登记办理流程
  • 新公司成立需要刻哪些章
  • 个体户转一般纳税人怎么做账
  • 低值易耗可以直接入管理费用吗
  • 进料加工委托 加工费发票怎么开
  • 城镇土地使用税暂行条例
  • 国外客户手续费差异账务处理如何做?
  • 接受投资者的无形资产
  • 自制半成品具体如何处理账务?
  • 利润表的企业所得税怎么查询
  • 全年一次性奖金计税方式
  • 资金账簿怎么交
  • 工资表中有哪些项目
  • 冲减留抵税额
  • 金税盘的年费怎么做抵扣帐
  • 小规模纳税人购进商品的会计分录
  • 公司一季度报表一般是什么时候出
  • 财务人员必备知识
  • 待处理财产损益科目编码
  • 租入固定资产装修
  • 金税三期核心征管系统行政处罚
  • 以股权增资的税费怎么算
  • 6%技术服务费是普票还是专票
  • 单位给个人报销计入什么科目
  • 如何设置win10电脑开机不黑屏
  • 刷路由器固件的作用和意义
  • 收藏的php常用函数是什么
  • php include path
  • phpstudy怎么配置php环境
  • 使用二氧化碳灭火器时人应该站在什么位置
  • 房改转移什么意思
  • uni-app介绍
  • 长期股权投资的账面价值怎么计算
  • php验证码代码怎么写
  • 织梦怎么调用当前栏目下的文章
  • 接待客户的住宿费计入什么科目
  • 金税盘减免税款月末如何结转
  • 人工安装费是几个点税税率
  • 个税哪种申报方式好
  • 企业购买黄金可以避税
  • 员工工资需要交税吗
  • 电子发票开错了应该怎么办?
  • 民办非企业单位什么意思
  • 营业总收入同比增长怎么分析
  • 利润表中利息费用包括手续费吗
  • 进项税额是意思
  • 无形资产的税费需要累计摊销吗
  • 项目费用有哪些
  • 费用暂估入账后期如何冲销
  • 专利年费计入哪里
  • 固定资产支付的保险费计入成本吗
  • 利润与所有者权益的区别
  • 股东出资做什么科目
  • 记账凭证附单据数怎么算
  • 代扣代缴的个人所得税在现金流量表
  • 记帐凭证的填制方法
  • 期初建账怎么做
  • 清空mysql数据库
  • windows 文件名太长无法删除
  • windows8如何安装
  • windows8.1玩英雄联盟
  • pull current
  • ubuntu系统键盘无用
  • win8.1技巧
  • 安装linux系统步骤图解
  • android中使用md5后报非法延续字节
  • 深入理解javascript特性.pdf
  • div+css布局是什么
  • ThreadPool.RegisterWaitForSingleObject 设置等待超时事件
  • java项目怎么变成web项目
  • python基础教程chm
  • 河南税务局官网手机版
  • 过了征期更正申报进项税可以多认证嘛
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设