簡體   English   中英

為3個功能分叉3個子進程

[英]fork 3 child processes for 3 functions

我想派生3個子進程,並讓每個進程執行一個功能,並忙於等待它們完成。 第三個進程是一個倒數計時器,因此一旦運行時間達到0,我將使用IPC告訴其他進程退出。 我已經編寫了IPC部分之外的函數,它們分別運行,但是我無法讓fork()創建3個子進程來分別執行特定功能。

int main(int argc, char *argv[]) {
pid_t child_onepid, child_twopid, child_threepid, pid;

for (i = 0; i < 3; ++i) {
    pid = fork();
    if (pid) {
        continue;
    } else if (pid == 0 && i == 0) {
        show_time();
    } else if (pid == 0 && i == 1) {
        show_uptime();
    } else if (pid == 0 && i == 2) {
        show_timer(runtime);
    } else {
        printf("fork error\n");
        exit(1);
    }
}

return EXIT_SUCCESS;
}

這是我的輸出

Time: 06/28/2014 18:55:57PM
Timer: 00:09
>Timer: 00:09
6:55pm  up 171 day(s), 10:49,  17 users,  load average: 0.34, 0.38, 0.43
6:55pm  up 171 day(s), 10:49,  17 users,  load average: 0.34, 0.38, 0.43

您的代碼對我來說看起來不錯,但您的錯誤測試將永遠不會發生,因為if(pid)將在-1觸發。

除此之外,您是否可以確保您的函數不會返回,然后再遍歷自己的for循環副本,這將解釋輸出內容,所以我添加了一些break來確保這一點。

但是我還沒有測試代碼。

int main(int argc, char *argv[]) {
    pid_t pid;

    for (int i = 0; i < 3; ++i) {
        pid = fork();
        if (pid == -1) {
            perror("fork error\n");
            exit(EXIT_FAILURE);
        } else if (pid > 0)
            continue;
        } else if (i == 0) {
            show_time();
            break;
        } else if (i == 1) {
            show_uptime();
            break;
        } else if (i == 2) {
            show_timer(runtime);
            break;
        } 
    }

    return EXIT_SUCCESS;
}

暫無
暫無

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

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