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
相关产品推荐
相关产品推荐

