C - 并行执行 fork() 时 wait(NULL) 的含义

标签 c multiprocessing fork

在下面的代码中, fork 实际上是并行运行还是一个接一个运行?

wait(NULL) 是什么意思?

(程序创建了 n 个子进程,n 是通过命令行提供的)

int main ( int argc, char *argv[] ) {
    int i, pid;

    for(i = 0; i < atoi(argv[1]); i++) {
        pid = fork();
        if(pid < 0) {
            printf("Error occured");
            exit(1);
        } else if (pid == 0) {
            printf("Child (%d): %d\n", i + 1, getpid());
            exit(0); 
        } else  {
            wait(NULL);
        }
    }
}

最佳答案

它们确实并行运行,直到其中一个等待。

wait(NULL)或更准确地说 wait(0)意味着等到子进程中的状态发生变化。要了解有关 Unix/Linux C api 调用的信息,请输入 man <function Name>在命令行上。您需要习惯阅读这些页面,所以最好现在就开始。

在你的情况下

man wait

会给你你所需要的。

因为你只有 fork(...) ed一次,你只有一个 child 。父级等待直到它改变状态,并且由于子级在 fork 期间的状态与父级在 fork 之前的状态(运行)相同,因此可能的结果是父级等待直到 child 死了。然后父级将继续执行,但是因为它在 wait(...) 之后没有太多事情要做。调用,它也会很快退出。

关于C - 并行执行 fork() 时 wait(NULL) 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497315/

相关文章:

c - 使用属性对齐时的内存对齐(1)

python - multiprocessing.Queue 中的大对象死锁

c - 当我多次使用 fork() 时,我的程序不会停止

C++ Fork child,向 child 询问进程列表,在 Linux 中终止进程

c - 队列.h : how to create list of lists/queue of queues/similar combinations?

c - Ncurses 菜单越界

c - DisplayContext、displaySurface 和 displayBuffer 之间的区别?

Python 分布式计算(有效)

python - 在python中并行调用多个对象的方法

multithreading - perl fork()似乎没有利用内核,而只有cpu