我有一个可以在Linux下运行的守护进程。
程序接收到SIGSEGV信号,但它没有立即停止,根据收到SIGSEGV的日志时间是 - 01:11:45.085
和
它停止工作的时间是 - 01:11:48.219
它是多线程的,并且按时生成SIGSEGV,它就像25threads一样。
所以,问题是该程序如何设法再工作3秒,即使从生成SIGSEGV的线程中没有进行mo动作?
感谢。
答案 0 :(得分: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();
}