我正在尝试创建2个孩子,然后他们得到并且参数说明了2个孩子必须创建的子女数量如此:
我得到2个参数,例如2和3,他们必须创建那么多。我做了它并且它有点工作但是父母在他的第二个孩子死之前死了
edvsil@os:~/4laboras$ ./testas 2 3
pid=389 ppid=387
pid=390 ppid=387
pid=386 ppid=27959
pid=391 ppid=388
edvsil@os:~/4laboras$ pid=387 ppid=1
pid=392 ppid=388
pid=388 ppid=1
pid=393 ppid=388
我的代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int main( int argc, char *argv[] ){
pid_t child1;
pid_t child2;
int i, a, b;
child1 = fork();
if (child1 != 0){
child2=fork();
}
if (child1 == 0){
for (i=1; i<=atoi(argv[1]); i++){
if (a !=0){
a=fork();
if (a == 0){
printf("pid=%d ppid=%d\n", getpid(),getppid());
exit(1);
}
}
}
}
else
if (child2 == 0){
for (i=1; i<=atoi(argv[2]); i++){
if(b !=0){
b=fork();
if (b == 0){
printf("pid=%d ppid=%d\n", getpid(),getppid());
exit(1);
}
}
}
}
printf("pid=%d ppid=%d\n", getpid(),getppid());
return 0;
}
答案 0 :(得分:1)
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int main( int argc, char *argv[] ){
pid_t child1;
pid_t child2;
int status;
int i, a, b;
child1 = fork();
if (child1 != 0){
child2=fork();
}
if (child1 != 0 & child2 != 0){
wait(&status);
}
if (child1 == 0){
for (i=1; i<=atoi(argv[1]); i++){
if (a !=0){
a=fork();
if (a == 0){
printf("pid=%d ppid=%d\n", getpid(),getppid());
exit(1);
}
}
}
}
else if (child2 == 0){
printf("pid=%d ppid=%d\n", getpid(),getppid());
for (i=1; i<=atoi(argv[2]); i++){
if(b !=0){
b=fork();
if (b == 0){
exit(1);
}
}
}
exit(status);
}
printf("pid=%d ppid=%d\n", getpid(),getppid());
return 0;
}
答案 1 :(得分:0)
使用wait
或waitpid
在父母中等待,直到所有孩子完成执行。
小心不要制造叉炸弹。