c - 在 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。伪代码会很棒
解决方案
推荐阅读
- python - 通过套接字发送 JSON 有效负载大小和数据
- jenkins - Jenkins 自由式项目没有被 github webhook 触发
- java - Reactor - 理解 .flatMap() 中的线程池
- reactjs - 如何从 ReactJS 中的另一个类调用方法?
- powershell - 为什么这不起作用?数组不正确吗?
- regex - 从变数块到末尾查找字符串
- android - 如何将 System.property 从 Gradle 传递给 Android App?
- python - Kivy:在所有屏幕上显示操作栏
- c# - 如何使用 TcpClient 查找局域网中的所有 IP 地址
- java - 看不懂方法和构造函数的先后顺序