プロセス(バイナリツリー)ごとに2つの子を作成しようとしていて、n = 3の場合プロセスツリー構造は(2)、(1)→(3)、(2)→(4)、(2)→(5)子プロセスごとに2つのプロセスがありますが、n =数値を指定し、バイナリツリー形式で渡された数値に基づいてプロセスを作成します。 私のコードは次のとおりです。各プロセスが2つ以上の子プロセスを持たないプロセスのバイナリツリー構造を作成しようとしています
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
int foo(const char *whoami) {
printf("I am a %s. My pid is:%d my ppid is %d\n", whoami, getpid(), getppid());
return 1;
}
int func()
{
int pid = fork();
if (pid==0) {
foo("child");
int pid2 = fork();
if (pid2==0) {
foo("child");
exit(0);
}
else {
wait(NULL);
}
int pid3 = fork();
if (pid3==0) {
foo("child");
exit(0);
}
else {
wait(NULL);
}
exit(0);
}
else {
wait(NULL);
}
int pid1 = fork();
if (pid1==0) {
foo("child1");
int pid4 = fork();
if (pid4==0) {
foo("child");
exit(0);
}
else {
wait(NULL);
}
int pid5 = fork();
if (pid5==0) {
foo("child");
exit(0);
}
else {
wait(NULL);
}
exit(0);
}
else {
wait(NULL);
}
return 0;
}
int main()
{
foo("parent");
func();
return 0;
}
output :
私は親です。私のPIDは:37私のppidは18です
私は子供1です。私のPIDは:38私のppidは37です
私は子供2です。私のPIDは:39私のppidは38
私はchild3です。私のpidは:40私のppidは38
私はchild4です。私のpidは:41私のppidは37
私は子供です。私のPIDは:42私のppidは41
私はchild5です。私のpidは次のとおりです。43私のPPIDは41
私は子プロセスの数をn 'に関連して作成する方法を明確に理解していません'。これを明確にしてください。 (例えば、 'n'は2人の子供をフォークするプロセスの数、' n'はフォークされたプロセスの総数です...) – Scheff
@Scheff私は、それぞれに2つの子を作成するプロセスのバイナリツリーを生成しようとしていますプロセスがn = 3を渡すと仮定すると、プロセスツリーは以下のようになります。 – Raj
@Scheff I /\ /\ /\ /\ /\ 私が /\ 私私は – Raj