APUE-10信号

10.1 信号的概念

信号是软件中断,提供了一种处理异步事件的方法,信号的响应依赖于中断。eg: 终端用户输入中断键(Linux 用户 ctrl + c), 会通过信号机制停止一个程序。

信号名字:SIG+…

产生信号的条件
(1). 当用户按某些终端键时,引发终端产生信号;eg: ctrl + C -> SIGINT(中断信号)
(2). 硬件异常产生信号,除数为0、无效的内存引用等。通常由硬件检测到,通知内核,内核为该条件发生时正在运行的进程产生适当的信号
(3). 当检测到某种软件条件已经发生,并应将其通知有关的进程时也产生信号。
(4). 进程调用kill(2,2表示系统调用函数)函数可以将任意信号发送给另一个进程或者进程组。限制条件:接受信号和发送信号的进程的所有者必须相同,或者发送信号进程的所有者是超级用户
(5). 用户用kill(1,1表示标准命令)命令将信号发送给其他进程。

处理信号
(1). 忽略信号,SIGKILL和SIGSTOP不可以被忽略。
(2). 执行系统默认动作。
(3). 捕捉信号。要通知内核在某种信号发生时,调用一个用户函数,在用户函数中,可执行用户希望对这种事件进行的处理。

core文件
一个程序崩溃时,一般会在指定目录下面生成一个core文件,core文件仅仅是进程的内存映象(同时加上调试信息)。

10.2 函数signal

void (*signal(int signo, void (*func)(int)))(int);

1. signo是信号名,SIGINT,SIGKILL等;
2. 返回值:如果成功,返回以前信号处理配置;如果失败,返回SIG_ERR;
3. func的值为SIG_IGN, SIG_DFL或者当接到此信号后要调用的函数指针(函数也可以,会自动转换成函数指针);

信号会打断阻塞的系统调用

10.3 不可靠的信号、可重入函数

1. 信号的行为不可靠???这部分没看明白!!!

2. 可重入函数

可重入函数可以解决信号不可靠。
所有的系统调用都是可重入地,如:read(), write()
一部分库函数也是可重入地,如:memcpy()

学C++去了,过几天再过来

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值