父母在for for循环前死亡

时间:2015-05-27 19:27:31

标签: c unix

我正在尝试创建2个孩子,然后他们得到并且参数说明了2个孩子必须创建的子女数量如此:

http://i.imgur.com/bR3tTNP.png?1

我得到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;
}

2 个答案:

答案 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)

使用waitwaitpid在父母中等待,直到所有孩子完成执行。

小心不要制造叉炸弹。