分叉后退出子进程

时间:2015-09-15 22:54:54

标签: c process operating-system fork pid

我有这个代码,它的目标是创建N个子进程并打印出每个PID和进程号。

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

void childProcess(int num)
{
    pid_t pid = fork();

    printf("Hello! I am process no. %d! my PID is %d!\n", num, pid);
}

int main()
{
    int i = 0;

    for(i = 1; i <= 5; i++)
    {
        childProcess(i);
        _exit(3);
    }
    exit(0);
}

然而,在尝试多种方式后:例如exit_exi t,childProcesspid = wait()中的递归,我仍然无法仅创建5个进程。到目前为止,我的输出是:

Hello! I am process no. 1! my PID is 96196!
Hello! I am process no. 1! my PID is 0!

我不确定如何正确退出子进程。没有退出代码就会创建N!过程

2 个答案:

答案 0 :(得分:5)

您正在退出子进程,只是您在错误的时间执行此操作。在fork()之后,每个子进程都保持与父进程相同的循环,创建另一个子进程,这就是为什么你最终拥有它们的原因。

正确的代码是这样的:

for (int i = 0; i < 5; i++) {
  if (fork() == 0) {
    // child process
    printf("I'm child %d, my pid is %d\n", i, getpid());
    exit(0);
  }
  // parent process keeps running the loop
}

答案 1 :(得分:0)

fork()将您的流程拆分为两个流程,即父流程和子流程。您需要在childProcess()内对其返回值进行某种测试,以确定您是在父母还是孩子中。如果pid为0,那么你就是孩子;如果非零,那么你在父母。基于此,您将有条件地退出该计划。

相关问题