我有一个在 Linux 下工作的守护进程。程序接收到 SIGSEGV 信号但它没有立即停止,根据它收到 SIGSEGV 的日志时间是 -01:11:45.085
并且它停止工作的时间是 - 01:11:48.219
它是多线程的,并且在生成 SIGSEGV 时它有 25 个线程。
所以,问题是程序如何设法额外工作 3 秒,即使没有从生成 SIGSEGV 的线程执行任何操作?
谢谢。
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();
}