多次调用 fork() 和 wait() 时哪个子进程会先执行?

问题描述 投票:0回答:1

当您多次拨打

fork()
,然后再拨打
wait()
时;哪个孩子会先被处决?第一胎还是第二胎?

int main(int ac, char **av, char **env)
{
    t_d f;
    static int ii;
    int fd[2];
    int pid;
    int pid1;

    if (ac != 5)
        return (1);
    else
    {
        // f.fd1 = creat_open_file(av[1], 0);
        // f.fd2 = creat_open_file(av[4], 1);
        if (pipe(fd) == -1)
            exit (1);
        pid = fork();
        if (pid == -1)
            exit (1);
        if (pid == 0)
        {
            ft_printf("chi i == %d\n", ii++);
            child_process_(av[2], env, fd);
        }
        pid1 = fork();
        if (pid1 == 0)
        {
            ft_printf("par i == %d\n", ii++);
            parent_process_(av[3], env, fd);
        }
        // waitpid(pid, NULL, 0);
        // waitpid(pid1, NULL, 0);
        close(fd[1]);
        close(fd[0]);
        wait(NULL);
        wait(NULL);
    }
    return (0);
}

在我的代码中,第一个孩子首先被执行,但我想知道为什么第一个孩子首先被执行而不是第二个孩子的详细信息。

按照我的预期,我认为应该先处决的是老二。

c process fork wait
1个回答
0
投票

它没有固定的操作顺序,第一个孩子更有可能在第二个孩子之前执行的原因只是因为它是第一个创建的,并且可能在第二个孩子之前请求CPU时间。按照代码的结构方式,所有子进程都将执行 if 之外的代码行,因为您没有退出,因此第一个子进程实际上将调用 fork,并且两个子进程都会调用 wait(NULL) 2 次,包括父进程。小心一点。

© www.soinside.com 2019 - 2024. All rights reserved.