2016-12-03 44 views
0

我想用fork()创建一个儿子(1),并且这个儿子需要创建另一个儿子(2)。如何使用fork()来创建一个子进程?

儿子(1)和父亲需要等待他们的儿子的结束给出信息。我希望他们所有人都可以使用printf他们的PID。

这是我的代码:

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 

    int pid; //i know thats not good 

    if((pid = fork()) == 0) { //this isnt good either 
    printf ("SON %d\n",getpid()); 

    } else { 
    // sleep(1) not necessary 
    printf ("Thats the Father\n"); 
    printf ("PID of my Son PID %d\n",pid); 
    } 
} 

发现了一些相关信息来创建多个孩子在1对父亲的,但我不知道,如何创建一个新的子出来的孩子。

+1

进程是性别中立的。 '叉子'创造一个“孩子”,而不是“儿子”。 –

回答

1

找到几个信息来创建多个孩子出1父亲,但我不知道,如何创建一个新的孩子出来的孩子。

这与您如何创建第一个子进程完全相同。您需要在子进程中再次fork()才能创建另一个进程。使用wait(2)来等待子进程。

考虑的例子(没有错误检查):

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/wait.h> 
int main(void){ 

pid_t pid; 

if((pid = fork()) == 0) { 
    printf ("Child process: %d\n", (int)getpid()); 
    pid_t pid2; 

    if ((pid2 = fork()) == 0) { 
     printf("Child's child process: %d\n", (int)getpid()); 
    } else { 
     int st2; 
     wait(&st2); 
    } 
} else { 
    printf ("Parent process: %d\n", (int)getpid()); 
    int st; 
    wait(&st); 
} 

return 0; 
} 
0

感谢伟大的反应。知道了。

我的实际代码:

#include <stdio.h> 
#include <stdlib.h> 

int main(void){ 

int pid; 
int pid2; 
int st; 
int st2; 

if((pid = fork()) == 0) { 
    printf ("Kind: %d\n",getpid()); 

    if ((pid2 = fork()) == 0) { 
     printf("Kindes Kind process: %d\n",getpid()); 
    } else { 
       wait(&st2); 

    } 
} else { 
    printf("Ich warte auf meinen Sohn\n"); //WAITING FOR MY SON 
    wait(&st); 
    printf("mein Sohn ist fertig\n"); // MY SON IS RDY 
     printf ("Vater process: %d\n", getpid()); 
    printf("Vater: Status = %d\n",st); //MY STATUS AS A FATHER 
} 

return 0; 
} 

我的结果:

Ich warte auf meinen Sohn //waiting for my son 
Kind: 2175 //pid children 
Kindes Kind process: 2176 // childrens child pid 
mein Sohn ist fertig //my son finished 
Vater process: 2174 //father pid 
Vater: Status = 0 //father status 

我唯一的问题是,第一个孩子的PID打印出第一。 我想要孩子等待自己的孩子,并打印出他自己的孩子。

像:

waiting for my Son(2) 
pidchild2 
my son2 finished 
status 
waiting for my son 
pidchild1 
my son1 finished 
father pid 
status 

编辑:

得到了它,我认为

刚刚给printf超越WAIT2。很明显

#include <stdio.h> 
#include <stdlib.h> 

int main(void){ 

int pid; 
int pid2; 
int st; 
int st2; 

if((pid = fork()) == 0) { 


    if ((pid2 = fork()) == 0) { 
     printf("Kindes Kind process: %d\n",getpid()); 
    } else { 
    printf("Ich warte auf meinen Sohn1\n"); 
       wait(&st2); 
    printf("mein Sohn ist fertig2\n"); // MY SON IS RDY 
    printf ("Kind: %d\n",getpid()); 
    printf("Sohn1: Status = %d\n",st2); //MY STATUS AS A FATHER 

    } 
} else { 
    printf("Ich warte auf meinen Sohn\n"); //WAITING FOR MY SON 
    wait(&st); 
    printf("mein Sohn ist fertig\n"); // MY SON IS RDY 
     printf ("Vater process: %d\n", getpid()); 
    printf("Vater: Status = %d\n",st); //MY STATUS AS A FATHER 
} 

return 0; 
} 
相关问题