信号机制概述

文章讲述了Unix/Linux系统中用于进程控制的函数,如kill、raise和abort,以及如何处理核心文件。还讨论了多进程程序与CPU资源的关系。alarm函数用于设置定时器,但不支持周期性定时,而setitimer则可以实现周期性定时。另外,文章介绍了信号捕捉机制,通过signal函数定义信号处理方式,包括忽略、默认行为和自定义回调函数。最后提到了信号集用于管理多个信号及其相关函数。
摘要由CSDN通过智能技术生成

 

  

 

 

 

  kill、raise、abort函数

 

 

修改core文件大小;

运行错误会出现core文件;

 

 

kill;

raise;

abord; 

 

多进程程序会抢占CPU资源; 

 alarm 函数

默认终止当前的进程;

 返回值:

之前没有计时器,返回0

有计时器,返回之前定时器倒计时剩余的时间;

SIGALARM:默认终止当前的进程,每一个进程有且只有一个唯一的计时器; 

第二次调用alarm之前的无效;

该函数不阻塞

1.第一次调用返回0

2.第二次调用返回上一次定时器的时间

3.定时器时间到返回信号终止进程;不会执行while

 

 使用定时器完成一秒钟计算器输多少个数:

 但是,我们看到终端输出不止一秒,不是因为计时器不止一秒,是因为终端输出需要时间;需要消耗IO时间;

实际运行的时间=内核时间(系统调用)+用户时间+IO消耗的时间。。。

进行文件IO操作比较消耗时间;

定时器与进程的状态无关;无论进程属于什么状态,alarm都会⏲;

setitimer 定时器函数

alarm不能周期性定时;setitimer()可以实现周期性定时;

 

 

  

 返回值:0成功;-1失败;

signal 信号捕捉函数

捕捉信号做一些处理不让程序直接退出;

 

 

 传递一个函数指针:怎么去处理信号;

signum:要捕捉的信号;

handle:要如何处理;

        -SIG_IGN:忽略;

        -SIG_DFL:使用信号默认的行为;

        -回调函数:内核去调用,程序员只负责写;捕捉到信号后如何去处理;

SIGKILL和SIGSTOP不能被捕捉和忽略;(如果可以被捕捉,可以写一个病毒程序不能被杀死)

 

 回调函数:提前准备好,需要程序员去实现,函数类型据实际情况而定;当信号产生时由内核调用;

 函数指针是实现回调的手段;函数实现之后,将函数名放到函数指针的位置上就可以了;

:要在信号之前注册捕捉信号

 

函数指针:返回值void,参数int;

int类型的参数表示捕捉到的信号的值;

 例如:

 

 

 信号集及相关函数

对多个信号进行统一的管理;多个信号可以用信号集的数据结构表示;

 阻塞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值