[英]Retrieving the total amount of processes from a fork() call using WEXITSTATUS
在看這篇文章時,我不理解Kaylum的回答。 我有兩個問題。
1)他/她想使用變量“ count”來計算從fork派生的進程總數(即子孫等的總數+原始進程)。 我看到他/她首先通過在父進程中將count設置為1來開始(對父母進行計數),但是隨后他/他在子進程中將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);
}
我看到他/她首先通過在父進程中將count設置為1來開始(對父母進行計數),但是隨后他/他在子進程中將count再次設置為1。 為什么這有意義? 計數已設置為1,並且僅將計數再次設置為1。
否則,循環中創建的每個子進程的count
數值都可能大於1
。 記住fork()
從當前狀態復制一個進程。 因此,對於循環中任何給定的fork()
, count
不一定都是1。如果在else
部分中打印count
的值,則可以輕松理解這一點。
我一直在調查WEXITSTATUS,據我所知,它通過退出返回進程的退出狀態。 我的問題是我必須使用exit(0)還是exit(1)?
這就是return(count)
。 從main返回等於調用exit
即exit(count);
。
請注意, 此答案將計數通過exit()
狀態傳遞。 歷史上, 退出狀態值限制為8位值。 因此,在大多數平台上,對於任何大於8的i
值,它可能都無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.