我想用fork()创建一个子(1),这个儿子需要创建另一个子(2)。
儿子(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个父亲中的多个孩子,但我不知道,如何从孩子身上创建一个新孩子。
答案 0 :(得分: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;
}
答案 1 :(得分: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首先打印出来。 我希望孩子等他自己的孩子和打印出他自己的pid。
像:
waiting for my Son(2)
pidchild2
my son2 finished
status
waiting for my son
pidchild1
my son1 finished
father pid
status
编辑:
得到它,我想
只需要在wait2之外的printf。很明显
#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;
}