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类型的参数表示捕捉到的信号的值;
例如:
信号集及相关函数
对多个信号进行统一的管理;多个信号可以用信号集的数据结构表示;
阻塞