gpt4 book ai didi

c++ - 守护进程在 SIGSEGV 之后继续工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:44 25 4
gpt4 key购买 nike

我有一个在 Linux 下运行的守护进程。 程序收到 SIGSEGV 信号但没有立即停止,根据收到 SIGSEGV 的日志时间是 - 01:11:45.085 和它停止工作的时间是 - 01:11:48.219 它是多线程的,并且按时生成了 SIGSEGV,其中有大约 25 个线程。

那么,问题是即使生成 SIGSEGV 的线程没有执行任何操作,程序如何设法额外工作 3 秒?

谢谢。

最佳答案

SIGSEGV 默认会终止进程,但您可以处理信号,signal.h 是 C 中的头文件,例如,如果您需要在退出前清理文件或通信。我做了一个简短的代码示例,它确实会导致 SIGSEGV 并处理它并在之后做一些事情,这只是一个例子,可能不是一个很好的例子。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

void sighandler( int signal);
int main(){
signal(SIGSEGV,sighandler);
int* a = NULL;
a[0] = 5;
return 0;
}

void cleanup(){
// do neccesary cleanup
sleep(3);
exit(0);
}

void sighandler( int signal){
if ( signal == SIGSEGV){
printf("oups, sigsegv\n");
} else {
printf("some sig\n");
}
cleanup();
}

关于c++ - 守护进程在 SIGSEGV 之后继续工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com