我试图让我的进程在收到SIGUSR1
. 由于SIGINT
更容易测试,我正在使用它。
这是代码:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void sig_handler(int signo){
if (signo == SIGINT){
char *args[] = { "./a", NULL };
write(1, "Restarting...\n", 14);
execv(args[0], args);
}
}
int main(void) {
printf("Starting...\n");
struct sigaction saStruct;
sigemptyset(&saStruct.sa_mask);
sigaddset(&saStruct.sa_mask, SIGINT);
saStruct.sa_flags = SA_NODEFER;
saStruct.sa_handler = sig_handler;
sigaction(SIGINT, &saStruct, NULL);
while (1)
sleep(1);
}
不幸的是,这只适用于第一次接收到信号。之后,它什么也不做。我认为SA_NODEFER
旗帜应该按照我想要的方式进行这项工作,但事实并非如此。
此外,当我尝试使用 时SIGUSR1
,它只会终止该过程。