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

时间:2013-05-23 13:57:16

标签: c++ linux daemon

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

所以,问题是该程序如何设法再工作3秒,即使从生成SIGSEGV的线程中没有进行mo动作?

感谢。

1 个答案:

答案 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();
}