[Linux:]信号
1.如何理解信号 例如在生活中,快递员告诉我们快递到了,那么我们会终止手上的事,去取快递,这就是一种信号。 站在操作系统的角度,再来理解信号: 1.用户输入命令,在Shell下启动一个前台进程。 2. 用户按下 Ctrl-C ,这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程 3. 前台进程因为收到信号,进而退出。 所以,显而易见,信号是操作系统与用户通信的一种方式,也可以是进程间通信的方式。 2. Linux下信号机制 信号是进程间时间异步通知的一种方式,属于软中断。 在Linux下我们可以使用 kill -l 命令查看系统定义的信号列表。 2.1 信号常见的处理方式 忽略此信号。 执行该信号的默认处理动作。 提供一个信号处理函数,要求内核在处理信号时切换到用户态执行这个处理函数,这种处理方式称之为捕捉一个信号。 2.2 产生信号的方式 通终端按键产生信号(如常用的Ctrl+z) 调用系统函数向进程发信号 由软件条件产生信号 硬件异常产生信号 3. Linux下信号阻塞 先来了解一些信号相关常见的概念: 信号递达(Delivery):实际执行信号的处理动作 未决信号(Pending):信号从产生到传递之间的状态。 阻塞信号(Blocking):被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作. 在内核中