我的问题是:
1.)我怎样才能让父进程总是最后死掉?我知道这没有完成,因为父进程是第一个运行的 pid,但我不知道如何更改它。
2.) 我如何让我的子进程像他的一样同时执行?我什至把这个数字提高了很多,看看这是否只是巧合,但似乎并非如此。
编辑:解决方案
1.) 在内部默认值2.) 中添加了两次 wait(NULL) 。使用 sleep(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;
}
我的输出总是这样:
父进程诞生,我的pid是7847 第一个孩子出生,我的pid是7848 第一个孩子执行迭代:1 第一个孩子执行迭代:2 第一个孩子执行迭代:3 第一个孩子执行迭代:4 第一个孩子执行迭代:5 第一个孩子执行迭代:6 第一个孩子执行迭代:7 第一个孩子执行迭代:8 第一个孩子执行迭代:9 第一个孩子执行迭代:10 第一个孩子安静地死去。 父进程静静地死去。 第二个孩子出生了,我的pid是7849 第二个孩子执行迭代 1 第二个孩子执行迭代 2 第二个孩子执行迭代 3 第二个孩子执行迭代 4 第二个孩子执行迭代 5 第二个孩子执行迭代 6 第二个孩子执行迭代 7 第二个孩子执行迭代 8 第二个孩子执行迭代 9 第二个孩子执行迭代 10 第二个孩子安静地死去。
我的任务是:
编写一个创建三个进程的 C 程序(“procs.c”):一个创建两个子进程的父进程。
第一个孩子应该做到以下几点:
显示“第一个孩子出生,我的 pid 是……”
显示十次消息“第一个孩子执行迭代 X”,其中 X 是迭代的次数
显示“第一个孩子安静地死去。”
第二个孩子应该做到以下几点:
显示“第二个孩子出生了,我的pid是……”
显示十次消息“第二个孩子执行迭代 X”,其中 X 是迭代的次数
显示“第二个孩子安静地死去。”
父进程应执行以下操作:
display "父进程诞生,我的pid是..."
创建第一个孩子
创建第二个孩子
显示“父进程安静地死掉。”
使用 gcc 编译程序并将可执行文件命名为“procs”。多次执行程序,注意两个孩子的输出是如何交错的。
该程序的一个可能输出是:
新星> ./procs 父进程诞生,我的pid是7847 第一个孩子出生,我的pid是7848 第一个孩子执行迭代:1 第一个孩子执行迭代:2 第一个孩子执行迭代:3 第一个孩子执行迭代:4 第一个孩子执行迭代:5 第二个孩子出生了,我的pid是7849 第二个孩子执行迭代 1 第二个孩子执行迭代 2 第二个孩子执行迭代 3 第一个孩子执行迭代:6 第二个孩子执行迭代 4 第二个孩子执行迭代 5 第二个孩子执行迭代 6 第一个孩子执行迭代:7 第二个孩子执行迭代 7 第二个孩子执行迭代 8 第二个孩子执行迭代 9 第二个孩子执行迭代 10 第二个孩子安静地死去。 第一个孩子执行迭代:8 第一个孩子执行迭代:9 第一个孩子执行迭代:10 第一个孩子安静地死去。 父进程静静地死去。