信号
一个信号就是一条小消息,通知进程系统中发生了一个某种类型的事件。
通常异常都是由内核异常处理程序进行处理的,正常情况下,对用户进程是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。
传送一个信号到目的进程的步骤:
- 进程组:
每个进程都属于一个进程组。通常父进程和子进程属于同一个进程组。
可以通过函数改变某个进程的进程组。 - 发送信号
- /bin/kill
可以发送任意信号,其中杀死进程的信号是 /bin/kill -9 pid
杀死进程组: /bin/kill -9 -15231(进程组PID) - 键盘发送信号
Ctrl+C会发送SIGINT到前台进程组中的每个进程,默认情况下会终止前台作业。
Ctrl+Z会发送SIGTSTP到前台进程组中的每个进程,默认会挂起前台作业。 - kill函数发送信号
可以给其他进程发送信号 - alarm函数发送信号
给自己发送SIGALRM信号。
- 接受信号
当内核把进程p从内核模式切换到用户模式,会检查进程p的未被阻塞的待处理信号的集合,如果集合为空,那么内核将控制传递到p的逻辑控制流中的下一条指令。然而,如果是非空的,那么会将集合中的某个信号k强制让p接收。 - 阻塞和解除阻塞信号
隐式阻塞:内核默认阻塞当前程序正在处理信号类型的待处理的信号。
显示阻塞机制:通过函数明确地阻塞和解除阻塞选定的信号。