【发布时间】:2018-05-07 04:43:18
【问题描述】:
我是 C 新手,所以我只知道简单的函数。(例如:wait(NULL))。
这是我的主要问题:
修改程序,使只有父进程创建3个子进程,每个子进程 新创建的进程调用函数 CPU()。另外,让父进程等待 每个孩子的终止。
我知道这是正确答案
#include<stdio.h>
int main(void)
{
int i ;
for( i = 0; i < 3; i++)
{
int ret = fork();
if(ret == 0){
printf("My process ID is %d\n", getpid());
return 0;
}
}
for (i = 0; i < 3; i++) //Line B
wait(NULL);
}
但我的问题是
-
为什么在循环中父进程执行等待时下面的代码是错误的
#include <stdio.h> int main(void) { int i ; for( i = 0; i < 3; i++) { int ret = fork(); if(ret == 0) { printf("My process ID is %d\n", getpid()); return 0; } else wait(NULL); } } 在第一个代码中,为什么我们要在 for 循环中写
wait(NULL)? 我们不能在没有for循环的情况下编写它吗-
如果子进程中没有“return 0”,是否应该将for循环改为
for (i = 0; i <7; i++) wait(NULL); CPU函数不知道怎么写
【问题讨论】:
-
这不是一个 C 问题,因为在 C11 标准 n1570 中没有提到
wait。它可以是POSIX 问题、Unix 问题或 Linux 问题。所以编辑你的问题来改进它并给出一些minimal reproducible example。顺便说一句,StackOverflow 不是 一个做我的家庭作业的网站。阅读ALP 或与 Unix、Linux 或 POSIX 编程相关的新内容。另请阅读fork(2) -
...当然要阅读wait(2)
-
最后,编译所有警告和调试信息:
gcc -Wall -Wextra -g和 GCC 和 use thegdbdebugger 以了解程序的行为 -
@BasileStarynkevitch 我不认为这是直截了当的“做我的作业问题”,但更像是一些问题,直到你写了一个有意义的 子进程。
-
我提供了几个链接来帮助 OP
标签: c