создайте/добавьте ребенка к ребенку с помощью вилки в xv6

#c #xv6

Вопрос:

ЭТО xv6

Я работаю над заданием, в котором нас инструктируют по тестированию реализации метода ps. ps печатает все активные процессы, их идентификатор процесса, идентификатор родителя, состояние и имя. Для первого теста мы должны назначить 8 дочерних элементов процессу с помощью функции fork (), и я это сделал.

Код для этого теста таков:

 int main(void) {
    int ppid = getpid();
    int pid = fork();

    if(pid > 0){
        for(int x = 0; x < 7; x  ){
            pid = fork();
            if(pid == 0){
                sleep(20);
                exit();
            }
        }
    }
    if(getpid() == ppid){
        ps();
    }
    while(wait() != -1);
    exit();
}
 
 The output is this (ignore shit and init)
1 1  init
2 1 S shit
3 2 R pstest2
4 3 Z pstest2
5 3 S pstest2
6 3 S pstest2
7 3 S pstest2
8 3 S pstest2
9 3 S pstest2
10 3 S pstest2
11 3 S pstest2
 

В этом тесте я провел один процесс с 8 прямыми детьми. Для следующего процесса мы должны сделать так, чтобы родитель разветвлял одного ребенка, который разветвлял одного ребенка, и так далее, пока не будет 8 процессов. Выглядит так

 O
 
  O
   
    O...
 

Я понятия не имею, как на самом деле использовать fork (), чтобы сделать текущий дочерний продукт дочерним, так как только я могу добавлять детей только к текущему родителю. Примечание: вилка возвращает 0 при успешном разветвлении нового процесса.
Код Psuedo был бы великолепен

Комментарии:

1. Подсказка: почему ваш текущий код проверяет возвращаемое значение fork() ? Каково значение этого возвращаемого значения?

2. Меня интересует XV6. Какой курс вы проходите? Найдены ли материалы в каком-нибудь общественном месте ?