gpt4 book ai didi

c - 使用 WEXITSTATUS 从 fork() 调用中检索进程总数

转载 作者:行者123 更新时间:2023-11-30 14:53:51 24 4
gpt4 key购买 nike

查看 this post我不明白凯勒姆的回答。我有两个问题。

1)她/他想要使用变量“count”来计算从 fork 产生的进程总数(即子孙等+原始进程的总数)。我看到她/他首先在父进程中将 count 设置为 1,这是有意义的(对父进程进行计数),但随后她/他在子进程中再次将 count 设置为 1。为什么这是有道理的? Count 已设置为 1,这只会将 count 再次设置为 1。

 count += WEXITSTATUS(status);

2)我一直在调查WEXITSTATUS,据我所知,它通过退出返回进程的退出状态。我的问题是我必须使用

exit(0)

exit(1)

或者其他让它工作的东西。这方面的文档并不清楚。换句话说,它可以像 Kaylum 的

为了方便起见,这里有完整的代码段:

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

int main(void)
{
pid_t before_pid, after_pid;
pid_t forked_pid;
int count;
int i;
int status;

before_pid = getpid();
count = 1; /* count self */
for (i = 0; i < 3; i++) {
forked_pid = fork();

if (forked_pid > 0) {
waitpid(forked_pid, &status, 0);
/* parent process - count child and descendents */
count += WEXITSTATUS(status);
} else {
/* Child process - init with self count */
count = 1;
}
}

after_pid = getpid();
if (after_pid == before_pid) {
printf("%d processes created\n", count);
}

return (count);
}

最佳答案

I see that S/he starts off by setting count to 1 in the parent process which makes sense (to count the parent) but then S/he sets count to 1 again in the children. Why does this make sense? Count is already set to one and this only sets count equal to 1 again.

否则,循环中创建的每个子进程的 count 值可能大于 1。请记住,fork() 会从当前状态复制进程。因此,对于循环中任何给定的 fork()count 不一定为 1。如果您在 中打印 count 的值, >else部分,你很容易理解这一点。

I have been investigating WEXITSTATUS and from what I can gather it returns the exit status of a process through exit. My question is do I have to use exit(0) or exit(1)?

这就是 return(count) from 的作用。从 main 返回相当于调用 exitexit(count);

请注意,this answer 通过 exit() 状态传递计数。 exit status 值历来限制为 8 位值。因此,在大多数情况下,对于任何大于 8 的 i 值,它可能无法按预期工作平台。

关于c - 使用 WEXITSTATUS 从 fork() 调用中检索进程总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993402/

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