在linux信号处理程序中调用exec?

时间:2019-06-01 01:58:50

标签: linux signals exec

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

int g_argc;
char **g_argv;

void sighandler(int sig)
{
    execvp(g_argv[0], g_argv);
}
int main(int argc, char **argv)
{
    g_argc = argc;
    g_argv = argv;
    signal(SIGSEGV, sighandler);
    printf("GGWP\n");
    sleep(5);
    *(int*)0 = 1; //trigger segfault
}

我尝试这样做,以便即使进程崩溃也可以保持pid恒定。但是当我测试它时,我发现execvp仅被调用一次。然后该过程终止。 exec意味着重新创建一个新的进程,为什么信号处理程序在execvp之后无法注册?

0 个答案:

没有答案