小编sup*_*esk的帖子

fork()泄漏了吗?花更长时间来分叉一个简单的过程

我有一个系统,其中运行两个相同的进程(让我们称之为副本).发出信号时,副本将使用该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)

c linux fork linux-kernel

18
推荐指数
1
解决办法
915
查看次数

标签 统计

c ×1

fork ×1

linux ×1

linux-kernel ×1