面试题答案
一键面试信号优先级大致情况
- SIGKILL:优先级最高。它是一种强制终止进程的信号,不能被阻塞、处理或忽略。常用于需要立即终止进程的紧急情况,如进程失控或陷入死循环。
- SIGTERM:优先级次之。这是一种正常的终止进程的信号,通常用于通知进程优雅地关闭。进程可以捕获这个信号,并进行清理工作(如关闭文件描述符、释放资源等)后再退出。
- SIGINT:优先级相对较低。它通常由用户通过键盘输入产生(如按下Ctrl + C),用于请求进程中断当前操作并终止。进程也可以捕获这个信号并进行相应处理。
多个信号同时到达时的处理
当多个信号同时到达时,系统一般按以下方式根据优先级处理:
- 首先处理高优先级信号:系统会优先处理优先级最高的信号,如先处理SIGKILL,若进程接收到SIGKILL信号,无论同时收到其他什么信号,都会立即终止。
- 相同优先级信号处理:对于优先级相同的信号,不同的UNIX系统实现可能略有不同。一般来说,内核会按照某种顺序依次处理这些信号,但这种顺序并不总是可预测的。在处理每个信号时,会根据信号的默认行为或进程自定义的信号处理函数来处理。如果进程为某个信号设置了信号处理函数,那么在接收到该信号时,就会执行相应的处理函数;如果没有设置处理函数,则按照信号的默认行为处理,如SIGINT默认行为是终止进程,SIGTERM默认行为也是终止进程等。