Unix:我如何使用 fork 使一些进程在其层次结构中看起来像这样?
Unix: How can I use fork to make some processes that look like this in their ierarchy?
我正在创建一个 .c 文件,然后使用 gcc 对其进行编译。我想使用 fork
来创建以下 7 个进程,并显示层次结构。我该怎么做?另外,我是否必须使用 wait
才能做到这一点
A
/ \
B C
|
D
/ | \
E F G
我在另一个网站上发现有人有类似的问题,我已经更新了他的解决方案以适应我的情况。这可能是一个解决方案:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
int status = 0;
printf("I am: %d\n\n", (int)getpid());
pid_t pid = fork(); // fork a child
if(pid == 0)
{
printf("Hi I'm process %d and my parent is %d\n",getpid(),getppid());
exit(1);
}
else
{
pid_t childPid = wait(&status);
pid_t pid = fork(); // fork a child
if (pid == 0)
{
printf("Hi I'm process %d and my parent is %d.\n", getpid(), getppid());
pid = fork(); // fork a child
if (pid == 0)
{
printf("Hi I'm process %d and my parent is %d.\n",getpid(),getppid());
pid = fork();
if(pid == 0)
{
printf("Hi I m process %d and my parent is %d\n", getpid(), getppid());
exit(4);
}
else
{
pid = fork();
if(pid==0)
{
printf("Hi i m process %d and my parent is %d\n", getpid(), getppid());
exit(5);
}
else
{
pid = fork();
if(pid == 0)
{
printf("Hi i m process %d and my parent is %d\n", getpid(), getppid());
exit(6);
}
}
}
exit(3);
}
exit(2);
}
}
return 0;
}
我正在创建一个 .c 文件,然后使用 gcc 对其进行编译。我想使用 fork
来创建以下 7 个进程,并显示层次结构。我该怎么做?另外,我是否必须使用 wait
才能做到这一点
A
/ \
B C
|
D
/ | \
E F G
我在另一个网站上发现有人有类似的问题,我已经更新了他的解决方案以适应我的情况。这可能是一个解决方案:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
int status = 0;
printf("I am: %d\n\n", (int)getpid());
pid_t pid = fork(); // fork a child
if(pid == 0)
{
printf("Hi I'm process %d and my parent is %d\n",getpid(),getppid());
exit(1);
}
else
{
pid_t childPid = wait(&status);
pid_t pid = fork(); // fork a child
if (pid == 0)
{
printf("Hi I'm process %d and my parent is %d.\n", getpid(), getppid());
pid = fork(); // fork a child
if (pid == 0)
{
printf("Hi I'm process %d and my parent is %d.\n",getpid(),getppid());
pid = fork();
if(pid == 0)
{
printf("Hi I m process %d and my parent is %d\n", getpid(), getppid());
exit(4);
}
else
{
pid = fork();
if(pid==0)
{
printf("Hi i m process %d and my parent is %d\n", getpid(), getppid());
exit(5);
}
else
{
pid = fork();
if(pid == 0)
{
printf("Hi i m process %d and my parent is %d\n", getpid(), getppid());
exit(6);
}
}
}
exit(3);
}
exit(2);
}
}
return 0;
}