中断信号
文章目录
【注意】最后更新于 October 25, 2022,文中内容可能已过时,请谨慎使用。
中断信号
[[../../../信号集]]
信号 是指软件中断信号,简称软中断,中断信号处理过程
中断信号处理程序(信号处理函数,信号捕捉函数] 完以后,就会返回继续执行主程序
中断源 : 就是产生中断信号的单元
- 在终端按下按键产生的中断信号 ctrl+c ,ctrl+z, ctrl+\
- 硬件异常
- 在终端使用kill发送
- posix_kill函数,pcntl_alarm函数
- 软件产生的中断信号, SIGURG[TCP/IP] , SIGALRM
中断相应 ,对信号的处理
- 忽略
- 执行中断处理函数[捕捉信号执行信号处理函数]
- 执行默认操作
中断返回 就是指中断服务程序运行完之后返回
几个常用的中断信号
信号
说明
SIGTSTP
交互停止信号,终端挂起 ctrl+z 终端驱动产生此信号,终止+core文件
SIGTERM
可以被捕捉,让程序先清理一些工作再终止
SIGSTOP
作业控制信号,也是停止一个进程,跟SIGTSTP一样
SIGQUIT
退出键 ctrl+\ 终端驱动程序产生,同事产生core文件
SIGINT
中断键 del/ctrl+c
SIGCHLD
子进程终止时返回
SIGUSR1,SIGUSR2
用户自定义信号
SIGKILL SIGSTOP
不能被 捕捉及忽略的信号,主要用于让进程可靠的终止和停止
SIGCONT
可以唤醒被停止的进程到前台继续运行
PHP扩展提供的函数
pcntl扩展, pcntl_alarm, pcntl_signal, pcntl_signal_dispatch … https://www.php.net/manual/zh/book.pcntl.php
中断系统调用
当进程正在执行系统调用的时候,接受到了中断信号,那么这个系统调用就会被中断,比如进程正在写文件, 系统会中断无法恢复,系统调用函数会返回 -1 会设置EINTR中断错误
如果能恢复,我们成为 “可重入函数” 否则就是非可重入函数
|
|
进程启动的时候,信号的处理是系统默认动作,自己编写处理函数会覆盖系统默认动作,有些信号不可以被覆盖,如SIGKILL SIGTOP
子进程可以继承父进程的信号处理函数,并且可以编写自己的以覆盖自己继承的处理函数,即重置