大家好接下来的一段时间我将开始学习野火的Linux 系统课程并将学习到的干货逐步更新到我的CSDN博客中。没时间刷课的同学可以把我的博客喂给AI 突击一下。目录一、信号基本概念二、信号怎么产生1. 硬件产生2. 软件产生三、信号的 3 种处理方式四、常用信号汇总表编辑五、kill VS pkill考点速记一、信号基本概念信号软件模拟的中断。 当进程收到信号会暂停当前正在做的事对这个信号做出对应响应。二、信号怎么产生1. 硬件产生硬件异常触发内核转发信号给进程执行非法指令访问非法内存段错误SIGSEGV硬件驱动程序上报其他硬件异常2. 软件产生代码 / 控制台手动触发控制台快捷键Ctrl CSIGINT 中断信号终止前台程序Ctrl \SIGQUIT 退出信号终止并生成 core 转储文件Ctrl ZSIGTSTP 停止信号暂停程序放到后台挂起shell 命令kill命令向指定 PID 进程发送信号代码里调用kill()函数程序内部给别的进程发信号三、信号的 3 种处理方式忽略进程收到信号直接无视当作这个信号从来没来过。⚠️ 有两个信号不能忽略SIGKILL、SIGSTOP强制杀、强制暂停无法忽略、无法捕获捕获自定义处理提前注册一个信号处理函数。一旦收到该信号进程就会自动调用你写的处理函数执行自定义逻辑。例按CtrlC不直接退出而是打印提示、关闭文件、释放资源再退出。默认处理使用操作系统预设的默认行为。常见默认动作终止进程、暂停进程、忽略、生成 core 文件。四、常用信号汇总表系统所有信号汇总查看信号列表命令kill -l作用列出系统全部信号编号与名字截图里就是这条命令的输出。1~31不可靠信号传统信号34~64可靠信号实时信号信号名编号产生原因默认处理方式备注SIGHUP1关闭终端 / 断开会话终止进程常用于守护进程重新加载配置SIGINT2Ctrl C终止可以捕获前台程序中断SIGQUIT3Ctrl \终止 生成 core 转储文件崩溃留堆栈信息SIGABRT6abort()函数调用终止 转储程序主动异常退出SIGFPE8算术错误除 0、溢出终止 转储PPT 里写的 SIGPE 是笔误SIGKILL9kill -9 pid终止不可捕获、不可忽略强制杀进程杀手锏SIGUSR110用户自定义忽略留给程序员自己用SIGSEGV11段错误访问非法内存终止 转储最常见野指针、越界访问SIGUSR212用户自定义忽略自定义信号SIGALRM14alarm()闹钟函数终止定时触发信号SIGTERM15kill pid不带参数终止优雅退出程序可以捕获、清理资源后退出SIGCHLD17子进程状态改变退出 / 暂停忽略父进程用来回收子进程解决僵尸进程SIGSTOP19Ctrl Z暂停不可捕获、不可忽略强制挂起进程✅SIGKILL (9)、SIGSTOP (19) 不能捕获、不能忽略。五、kill VS pkillkill 命令kill 名字容易误解不是直接杀死进程是向进程发送信号kill pid # 默认发送 15号SIGTERM优雅终止 kill -9 pid # 发送9号SIGKILL强制杀死 kill -2 pid # 发送SIGINT等价CtrlCpkill 命令和 kill 功能一样区别kill 按 PID 号发信号pkill 按进程名字匹配发信号pkill ./test_app # 找到所有名字匹配test_app的进程发默认SIGTERM pkill -9 ./test_app # 强制杀死所有同名进程总节kill pid15 SIGTERM优雅退出。进程能捕获信号做资源释放、保存数据再退出。kill -9 pid9 SIGKILL强制杀死。进程无法捕获直接被内核干掉来不及清理。考点速记信号本质软件模拟中断是进程间异步通知机制。信号来源硬件异常、软件控制台快捷键、kill 命令、kill 函数。三种处理忽略、捕获自定义函数、系统默认。不可捕获 / 不可忽略信号SIGKILL(9)、SIGSTOP(19)。
