如何使用fork()来创建一个子进程?
问题描述:
我想用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父亲,但我不知道,如何创建一个新的孩子出来的孩子。
这与您如何创建第一个子进程完全相同。您需要在子进程中再次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;
}
答
感谢伟大的反应。知道了。
我的实际代码:
#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;
}
进程是性别中立的。 '叉子'创造一个“孩子”,而不是“儿子”。 –