#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. Какой курс вы проходите? Найдены ли материалы в каком-нибудь общественном месте ?