#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
之后无法注册?