You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下进程接收SIGKILL信号的行为及与std::exit()的差异

Linux进程接收SIGKILL的行为及与std::exit()的差异

一、进程接收SIGKILL信号的行为

当进程接收到SIGKILL信号后,内核例程处理完毕时,进程状态会从“dying”转为“dead”,内核随即开始对其进行清理,该清理过程与程序正常退出时的流程类似。清理完成后,进程会被分配一个大于128的返回码(用于表明进程是被信号终止),之后进入“僵尸(zombie)”状态。

二、接收SIGKILL信号与调用std::exit()的核心差异

调用std::exit()时的行为

调用std::exit()会触发C++运行时的一系列用户态清理操作,这些操作会被并发执行:

  • 执行当前线程关联的线程局部存储(thread local storage)对象的析构函数
  • 执行静态存储(static storage)对象的析构函数
  • 执行通过std::atexit()注册的退出函数

接收SIGKILL信号时的行为差异

进程接收到SIGKILL信号时,内核会直接终止进程并完成内核层面的资源清理,不会触发任何C++运行时的用户态清理逻辑——既不会执行对象的析构函数,也不会调用通过std::atexit()注册的函数。


内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:30:59