我有一个系统,其中运行两个相同的进程(让我们称之为副本).发出信号时,副本将使用该fork()调用复制自身.第三个进程选择一个进程随机杀死,然后发信号通知另一个进程以创建替换进程.在功能上,该系统运作良好; 它可以整天杀死/重生复制品,除了性能问题.
该fork()呼叫需要的时间越来越长.以下是仍然显示问题的最简单设置.时间显示在下图中:
副本的代码如下:
void restartHandler(int signo) {
// fork
timestamp_t last = generate_timestamp();
pid_t currentPID = fork();
if (currentPID >= 0) { // Successful fork
if (currentPID == 0) { // Child process
timestamp_t current = generate_timestamp();
printf("%lld\n", current - last);
// unblock the signal
sigset_t signal_set;
sigemptyset(&signal_set);
sigaddset(&signal_set, SIGUSR1);
sigprocmask(SIG_UNBLOCK, &signal_set, NULL);
return;
} else { // Parent just returns
waitpid(-1, NULL, WNOHANG);
return;
}
} else {
printf("Fork error!\n");
return;
}
}
int …Run Code Online (Sandbox Code Playgroud)