【发布时间】:2014-09-08 14:06:39
【问题描述】:
所以我正在尝试做一个fork()s 2 个孩子的应用程序。
- 首先执行
for(i=1; i<=50000; i++)循环 - 第二个
for(i=50000; i<=100000; i++)循环 - 父级执行
for(asciic=65; asciic<=90; asciic++)-> 循环以打印 A 到 Z 字母
我需要三个人同时工作,而不是一个接一个。
我查看了互联网,但找不到合适的方法,我能找到的只是创建子进程的循环,但它们做的事情几乎相同,而且大多数都是一个接一个地创建的。
感谢任何帮助。
为了更好地理解,这是我在发布之前所做的:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void) {
pid_t child_pid,child_pid1;
int i=0;
int stare;
int asciic;
child_pid=fork();
child_pid1=fork();
if (child_pid==0) {
//printf("Father PID: %d -> Child 1: %d\n",getppid(),getpid());
for(i=1; i<=50000; i++){
printf("%d-%d\n",getpid(),i);
}
exit(0);
} else if (child_pid1==0) {
//printf("Father PID: %d -> Child 2: %d\n",getppid(),getpid());
for(i=50000; i<=100000; i++) {
printf("%d-%d\n",getpid(),i);
}
exit(0);
} else {
//printf("PID-ul procesului parinte: %d\n", getpid());
pid_t rez=waitpid(child_pid,&stare,WNOHANG);
pid_t rez1=waitpid(child_pid1,&stare,WNOHANG);
while(rez==0 || rez1==0){
for(asciic=65; asciic<=90; asciic++){
printf("%d- %c\n",getpid(),asciic);
}
rez=waitpid(child_pid,&stare,WNOHANG);
rez1=waitpid(child_pid1,&stare,WNOHANG);
}
}
return 0;
}
如果我注释掉循环,我可以看到孩子有不同的 PID,1 个孩子有正确的父 PID,其他的有其他父 PID。
【问题讨论】:
-
@Klas Lindbäck,是的,这是一种拼写错误。