我的问题是:为什么我的进程不能同时运行?
1.)我怎样才能让父进程总是最后死去?我知道这是没有完成的,因为父母是第一个运行的pid,但我不知道如何改变它。
2.)我如何让我的子进程与他同时执行?我甚至把这个数字看得很高,看看它是不是巧合,但它似乎不是。
编辑:SOLUTIONS
1)加入等待(NULL)在两次内默认
2.)发生了什么。用睡眠(1)来证明它。
我的代码如下
#include <stdio.h>
int main() {
int pid, i;
pid = fork();
switch(pid) {
case -1:
// error
printf("Fork error");
break;
case 0:
// child process
printf("First child is born, my pid is %d\n", getpid());
for(i=1; i<10; i++)
printf("First child executes iteration %d\n", i);
printf("First child dies quietly.\n");
break;
default:
// parent process
printf("Parent process is born, my pid is %d\n", getpid());
pid = fork();
switch(pid) {
case -1:
// error
printf("Fork error");
break;
case 0:
// child process
printf("Second child is born, my pid is %d\n", getpid());
for(i=1; i<10; i++)
printf("Second child executes iteration %d\n", i);
printf("Second child dies quietly.\n");
break;
default:
// parent process
printf("Parent process dies quietly.");
}
}
return 0;
}
我总是输出看起来像这样:
Parent process is born, my pid is 7847 First child is born, my pid is 7848 First child executes iteration: 1 First child executes iteration: 2 First child executes iteration: 3 First child executes iteration: 4 First child executes iteration: 5 First child executes iteration: 6 First child executes iteration: 7 First child executes iteration: 8 First child executes iteration: 9 First child executes iteration: 10 First child dies quietly. Parent process dies quietly. Second child is born, my pid is 7849 Second child executes iteration 1 Second child executes iteration 2 Second child executes iteration 3 Second child executes iteration 4 Second child executes iteration 5 Second child executes iteration 6 Second child executes iteration 7 Second child executes iteration 8 Second child executes iteration 9 Second child executes iteration 10 Second child dies quietly.
我的任务是:
编写一个C语言程序( “procs.c”),其创建三个进程:创建两个子进程的父进程。
的第一个孩子应该做到以下几点:
显示“第一个孩子出生后,我的pid是......”
显示十倍的消息“第一个孩子来执行迭代X” ,其中X是迭代次数
显示“第一个孩子安静地死亡。”
第二个孩子应该做到以下几点:
显示“第二个孩子出生后,我的pid是......”
显示十倍的消息“老二执行迭代X“,其中X是迭代次数
显示”第二个孩子安静地死亡。“
父进程应该做到以下几点:
显示 “父进程是天生的,我的pid是......”
创建的第一个孩子
创建第二个孩子
display“Parent过程悄然死亡。“
使用gcc编译程序并将其命名为可执行的‘特效’执行程序数次,并注意如何将两个孩子的输出隔行
这项计划的一个可能的输出是:。
nova> ./procs Parent process is born, my pid is 7847 First child is born, my pid is 7848 First child executes iteration: 1 First child executes iteration: 2 First child executes iteration: 3 First child executes iteration: 4 First child executes iteration: 5 Second child is born, my pid is 7849 Second child executes iteration 1 Second child executes iteration 2 Second child executes iteration 3 First child executes iteration: 6 Second child executes iteration 4 Second child executes iteration 5 Second child executes iteration 6 First child executes iteration: 7 Second child executes iteration 7 Second child executes iteration 8 Second child executes iteration 9 Second child executes iteration 10 Second child dies quietly. First child executes iteration: 8 First child executes iteration: 9 First child executes iteration: 10 First child dies quietly. Parent process dies quietly.
我的书有一个和我一样的例子,除了default还有一个for循环。结果通常看起来像parent1,parent2,child1,child2,child3,child4,parent3等。在我的第一个孩子的执行过程中,为什么不是第二个孩子开始执行? –
你的机器速度太快了。 –
谢谢。你的帮助激励我将睡眠(1)放入我的孩子的过程中,以证明他们同时在跑步。 –