c - C while 循环中的 fork() 和 wait() ?

标签 c fork wait pid wexitstatus

我有一个用 c 编写的小程序,我试图了解它是如何工作的,它是一个简单的 while 循环,使用 fork()wait() 来在命令行上打印出几行,我已经尽我所能评论了我认为正在发生的事情

for (i = 1; i <= 3; i++)            /*simple while loop, loops 3 times */
{
    pid = fork();                   /*returns 0 if a child process is created */
    if(pid == 0){                   /*pid should be a 0 for first loop */
        printf("Hello!\n");         /*we print hello */
        return (i);                 /*will this return i to the parent process that called fork? */ 
    }   else {                      /*fork hasn't returned 0? */
        pid = wait(&j);             /*we wait until j is available? */
        printf("Received %d\n", WEXITSTATUS(j));   /*if available we print "received (j)" */
    }
}

这个程序应该打印:

Hello!
Received 1
Hello!
Received 2
Hello!
Received 3

当其中一个子进程返回i时,父进程是否会像&j一样等待它?这真的让我很困惑,任何帮助将不胜感激。

最佳答案

在循环的每次迭代中,fork() 创建一个子进程。这 子进程打印 Hello! 并将 i 返回给系统。这 父进程阻塞在 wait() 上,直到子进程完成执行。 j 将包含子进程返回给系统的值。

关于c - C while 循环中的 fork() 和 wait() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023869/

相关文章:

c - gcc 不会编译 SDL C 程序(对 SDL 函数的 undefined reference )

c - 在 C 中处理数组时出现的问题

c - 从文件中读取数据并将其写入链表

Git - 没有 Github 的 fork

Java延迟/等待

c - wait() 在 Unix 上做什么?

c - 从函数返回字符数组打印垃圾值但在函数中打印正常?

c - 管道问题 : first child writes too much in to pipe

c - 在 C 中子方法内使用循环的奇怪结果

javascript - 提交长 Javascript 请求时显示等待消息