首页 > 解决方案 > 在 xv6 中使用 fork 创建/添加一个孩子

问题描述

这是 xv6

我正在执行一项任务,我们被指示测试方法 ps 的实现。ps 打印所有活动进程、它们的进程 ID、父 ID、状态和名称。对于第一个测试,我们将通过 fork() 函数将 8 个子进程分配给一个进程,我已经做到了。

该测试的代码是:

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() 使当前的子产品成为子产品,因为我只能将子产品添加到当前的父产品中。注意:fork 成功分叉新进程时返回 0。伪代码会很棒

标签: cxv6

解决方案


推荐阅读