Process Tree:Как сделать конкретный процесс дерева, используя вилку()
Я хочу, чтобы дерево процессов, как на картинке выше. Я написал ниже код, но если вы посмотрите на PID, вы обнаружите, что есть проблема!
Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int a ;
int b ;
int c ;
int d ;
int e ;
int f ;
int g ;
int h ;
int i ;
b=fork();
if (b == 0) //it's child
{
d= fork();
if(d==0)
{
h=fork();
if(h==0)
{
i=fork();
if(i==0)
printf("%d: I\n", getpid());
else
printf("%d: H\n", getpid());
}
else
printf("%d: D\n", getpid());
}
else
{
e=fork();
if(e==0)
printf("%d: E\n", getpid());
else
{
f=fork();
if(f==0)
printf("%d: F\n", getpid());
else
printf("%d: B\n", getpid());
}
}
}
else
{
c=fork();
if(c==0){
g=fork();
if(g==0)
printf("%d: G\n", getpid());
else
printf("%d: C\n", getpid());
}
else
printf("%d: A\n", getpid());
}
return 0;
}
Output (UNIX):
10201: A
10203: C
10202: B
10204: G
10207: F
10206: E
10205: D
10208: H
10209: I
Вы можете видеть G (ИДП) = 04, а это значит, что это сделано раньше, чем D (ИДП) = 05
- Как я могу улучшить это?
- Другой вопрос: если какой-либо способ иметь определенный порядок печати PID, как в порядке (A, B, C, D, E, ...)?
Существует порядок, который я хотел бы создать:
10201: A
10203: C
10202: B
10204: D
10207: G
10206: F
10205: E
10208: H
10209: I
Что случилось с тем, что G было создано до D? И разве это упражнение, или вы пытаетесь решить настоящую проблему? И для того, чтобы получить конкретный заказ, вы согласитесь разрешить процессам общаться? – Beta
@Beta. Я бы создал D до G. Я отредактировал свой вопрос, посмотрю его снова. Нет Это просто упражнение. – Mehrdad
Вы не указали свою проблему себе точно - вам не нужна иерархия процессов (которая, если вы напечатали идентификатор идентификатора родительского идентификатора PPID - тоже, вы обнаружите, что это правильно рассматривается как иерархия); вам также требуется, чтобы все процессы на одном уровне были созданы до любого из процессов на следующем уровне. Это можно сделать; это просто требует некоторой осторожности. Каждый процесс, который порождает другие процессы, может создать канал; дети читают на правильном конце трубы; когда родитель создал свою квоту для детей, он закрывает оба конца трубы, отправляя EOF детям, которые продолжают работу. –