this post에서 Kaylum의 대답을 이해하지 못합니다. 두 가지 질문이 있습니다.WEXITSTATUS를 사용하여 fork() 호출에서 총 프로세스 양 검색
1) "count"변수를 사용하여 생성 된 총 프로세스 수 (즉, 손자 손자 + 원래 프로세스의 총 수)를 포크에서 계산하려고합니다. 나는 S/he가 부모 프로세스에서 count를 1로 설정함으로써 시작한다는 것을 알지만 (부모를 세는 것이 합리적 임) S/he는 자식에서 다시 count를 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