看着this post我不明白Kaylum的答案。我有两个问题。使用WEXITSTATUS从fork()调用中检索进程的总量
1)他/她希望使用变量“count”来计算产生的进程总数(即子孙孙等的总数+原始进程)。我看到,他/她通过在父进程中将count设置为1开始,这有意义(对父进行计数),但是然后S/he在子进程中再次将计数设置为1。为什么这有意义?计数已经设置为1,并且这只能再次设置计数等于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);
}
Kaylum的解决方案应该能够正常工作,但是它的数量限制在255:退出代码的最大值是255. – benjarobin
谢谢。我现在明白了。我知道它限于255这很好。我很欣赏这些意见。 – EFiore