- 产生信号的五种方式
- 用户按某些终端键
- 硬件异常
- 进程调用kill函数
- 用户使用kill命令
- 检测到某种软件条件已经发生
- 处理信号的三种方式
- 忽略(SIGKILL,SIGSTOP不能被忽略)
- 捕捉(SIGKILL,SIGSTOP不能被捕捉)
- 执行系统默认动作
- 大多数Unix系统调试程序用core文件检查进程终止时的状态
- exec函数将原先设置为要捕捉的信号都更改为默认动作,其他信号的状态不变(一个进程原先要捕捉的信号,当其执行一个新程序后就不能再捕捉了,因为信号捕捉函数的地址很可能在所执行的新程序文件中已无意义)
- 在signal函数使用中,不改变信号的处理方式就不能确定信号的当前处理方式
- 子进程继承父进程的信号处理方式,因为子进程复制了父进程的内存映像,所以信号捕捉函数的地址在子进程中是有意义的
- 不可重入函数
- 使用静态数据结构
- 调用malloc或free
- 是标准I/O函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构
- 在信号处理程序中调用可重入函数时,应在调用前保存errno,调用后恢复errno
- 除非支持POSIX.1实时扩展,否则大多数UNIX并不对信号排队,而是只递送该信号一次
- 在信号产生(generation)和递送(delivery)之间的时间间隔内,称信号是未决的(pending)
- 如果是非超级用户,基本规则是发送者的实际用户ID或有效用户ID必须等于接收者的实际用户ID或有效用户ID;特例:被发送的信号为SIGCONT,进程可将其发给属于同一会话的任一其他进程
- 12.
APUE读书笔记-第十章-信号
最新推荐文章于 2024-04-11 00:31:08 发布