标签:
信号的基本概念
为了了解信号,先从一个熟悉的场景开始说起:
1. 用户输入命令,在shell下启动一个前台进程。
2. 当用户按下Ctrl-C,这个键盘输入将产生一个硬件中断。
3. 如果CPU正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。
4. 终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一个SIGINT信号给该进程)。
5. 当某个时刻要从内核返回到该进程的用户空间代码继续执行之前,首先处理PCB中记录的信号,发现有一个SIGINT信号待处理,而这个信号的默认处理动作是终止进程,所以直接终止进程而不再返回它的用户空间代码执行。
Ctrl-C产生的信号只能发送给前台进程,如果要让一个进程处于后台运行,可以在一个命令后面加个&,这样shell就不必等待进程结束就可以接受新的命令、启动新的进程。shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接收到像Ctrl-C这种控制键产生的信号。前台进程在运行的过程中用户可以随时按下Ctrl-C而产生一个信号,也就是说该进程的用户空间代码执行到任何的地方都有可能收到SIGINT信号而终止,所以信号相对于进程的控制流程来说是异步的。
标签:
原文地址:http://www.cnblogs.com/stemon/p/5116564.html