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

Linux下如何检测第三方是否终止C++程序并返回退出状态140?

在C++中让第三方终止的进程返回退出状态140

第三方终止程序本质是向进程发送信号,你只需要捕获这些常见的终止信号,在信号处理逻辑里直接指定退出状态140即可,具体实现如下:

核心思路

  • 用sigaction()(比signal()更可靠)注册信号处理函数,捕获常见的终止信号(比如SIGTERM、SIGINT、SIGQUIT)
  • 在信号处理函数里调用_exit(140),而不是exit()——_exit()会直接终止进程,跳过全局对象析构、atexit回调等清理操作,保证退出状态准确传递

代码示例

#include <csignal>
#include <unistd.h>
#include <iostream>

void handleTerminationSignal(int signum) {
    // 收到终止信号时,直接返回状态140
    _exit(140);
}

int main() {
    struct sigaction sa;
    sa.sa_handler = handleTerminationSignal;
    sa.sa_flags = 0;
    sigemptyset(&sa.sa_mask);

    // 注册需要捕获的信号
    sigaction(SIGTERM, &sa, nullptr);
    sigaction(SIGINT, &sa, nullptr);
    sigaction(SIGQUIT, &sa, nullptr);

    // 模拟业务逻辑运行
    std::cout << "Process running. PID: " << getpid() << std::endl;
    while (true) {
        sleep(1);
    }

    return 0;
}

注意事项

  • SIGKILL(9号信号)是系统强制终止信号,无法捕获或忽略,如果第三方用kill -9终止进程,你无法自定义退出状态,这是系统级限制
  • 测试时,编译程序后后台运行,用kill <进程PID>发送SIGTERM,执行echo $?就能看到退出状态为140

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:32:33