面试题答案
一键面试- SIGINT(2)
- 应用场景:通常由用户通过按下
Ctrl+C
组合键产生,用于向正在运行的程序发送中断信号。常用于终止前台运行的程序,例如在命令行下运行一个while(1)
循环的程序,按下Ctrl+C
就会发送该信号,程序可以捕获此信号并进行一些清理工作后退出。
- 应用场景:通常由用户通过按下
- SIGTERM(15)
- 应用场景:这是一个通用的终止信号,系统或其他进程可以发送该信号来要求目标进程正常终止。比如系统在关机时,会向所有运行的进程发送
SIGTERM
信号,进程接收到该信号后,可进行资源释放、保存状态等操作后优雅退出。
- 应用场景:这是一个通用的终止信号,系统或其他进程可以发送该信号来要求目标进程正常终止。比如系统在关机时,会向所有运行的进程发送
- SIGKILL(9)
- 应用场景:这是一个强制终止信号,不能被捕获、阻塞或忽略。当一个进程出现严重问题,无法通过正常方式终止时,管理员可以使用
kill -9
命令发送该信号来强制结束进程,比如一个陷入死循环且无法响应SIGINT
或SIGTERM
的进程。
- 应用场景:这是一个强制终止信号,不能被捕获、阻塞或忽略。当一个进程出现严重问题,无法通过正常方式终止时,管理员可以使用
- SIGSEGV(11)
- 应用场景:当进程访问了非法内存地址,如空指针解引用、数组越界访问等,会收到该信号。程序在捕获到此信号后,可以记录相关错误信息,如通过
backtrace
函数获取堆栈信息,以便定位问题。
- 应用场景:当进程访问了非法内存地址,如空指针解引用、数组越界访问等,会收到该信号。程序在捕获到此信号后,可以记录相关错误信息,如通过
- SIGALRM(14)
- 应用场景:用于设置定时器,当定时器超时后,会向进程发送该信号。在实际编程中,可用于实现程序运行过程中的定时任务,例如定时清理缓存数据,或者在进行网络操作时设置超时时间,如果在规定时间内未完成操作,通过该信号处理函数来处理超时情况。
- SIGCHLD(17)
- 应用场景:当子进程状态发生改变,如子进程终止、暂停或继续运行时,父进程会收到该信号。父进程可以捕获此信号,通过
wait
或waitpid
函数来回收子进程的资源,避免产生僵尸进程。
- 应用场景:当子进程状态发生改变,如子进程终止、暂停或继续运行时,父进程会收到该信号。父进程可以捕获此信号,通过