MST
星途 面试题库

面试题:C语言中常见的Linux信号类型及应用场景

请列举至少5种Linux C语言中的信号类型,并简要说明每种信号在实际编程中的典型应用场景。
25.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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