gpt4 book ai didi

c - 在进程树中查找子进程的级别

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:43 24 4
gpt4 key购买 nike

我一直在尝试使用 fork() 创建一个进程树,并在树中打印每个子进程的级别(0 表示基本进程,1 表示它的子进程,2 表示它的孙进程等)。下面的代码仅适用于深度 0 和 1。知道如何改进它吗?谢谢。

#include <stdio.h>
#include <unistd.h>
int i;
int main()
{
pid_t baseID = getpid();
printf("Base Process ID: %d, level: 0 \n", baseID);
for (i = 0; i < 3; i++) {
int level = 1;
pid_t pid;
pid = fork();
if (pid == 0) {
pid_t childID = getpid();
pid_t parentID = getppid();
if (parentID == baseID) {
level = 1;
}
else {
// do something for grandchildren here
level++;
}
printf("Process ID: %d, Parent ID: %d, level: %d \n", getpid(), getppid(), level);
}
else {
wait(NULL);
}
}
return 0;
}

最佳答案

预期的流程树如下:

0
|->1
| |->2
| | |->3
| |
| |->2
|
|->1
| |->2
|
|->1

所以为了能够打印每个进程的级别,我们应该将 level 变量初始化为 0 for 循环并在每次创建子进程时递增它的值。

以下代码将按预期打印每个子进程的级别:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
pid_t baseID = getpid();
printf("Base Process ID: %d, level: 0 \n", baseID);

int level = 0;

for (int i = 0; i < 3; i++) {

pid_t pid = fork();

if (pid == 0) { // Child

pid_t childID = getpid();
pid_t parentID = getppid();

level++;

printf("Process ID: %d, Parent ID: %d, level: %d \n", getpid(), getppid(), level);

} else { // Parent
wait(NULL);
}
}

return 0;
}

关于c - 在进程树中查找子进程的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com