簡體   English   中英

使用WEXITSTATUS從fork()調用中檢索進程總數

[英]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返回等於調用exitexit(count);

請注意, 此答案將計數通過exit()狀態傳遞。 歷史上, 退出狀態值限制為8位值。 因此,在大多數平台上,對於任何大於8的i值,它可能都無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM