簡體   English   中英

關於wait()和waitpid()

[英]About wait() and waitpid()

因此,我在C上編寫了這段代碼。我創建了一個父親,它有兩個子進程,一個變成了僵屍。 一秒鍾后,它退出了,等待他的父親結束了。 另一個子進程保持孤立狀態,然后完成。 我的問題是,如果我改變了會發生什么waitwaitpid

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t pid;
    int status, value;

    pid = fork();

    if (pid > 0) { // Father

        pid = fork();

        if (pid > 0) { // Father
            wait(&status);
            value = WEXITSTATUS(status);

            if (value == 2)
                printf("Child 2");
            else if (value == 3)
                printf("Child 1");

        } else if (pid == 0) { //Child 2 - Orphan
            sleep(4);
            exit(2);

        } else {
            exit(1);
        }

    } else if (pid == 0) { // Child 1 - Zombie
        sleep(1);
        exit(3);

    } else {
        printf("Error al ejecutar el fork");
        exit(1);
    }



    return 0;
}

引用wait / waitpid

提供waitpid()函數的原因有以下三個:

  • 支持工作控制

  • 允許使用非阻塞版本的wait()函數

  • 允許庫例程(例如system()或pclose())等待其子進程而不會干擾該進程尚未等待的其他終止子進程

如果pid參數為(pid_t)-1並且options參數為0,則waitpid()函數應等效於wait()。否則,其行為應由pid和options參數的值修改。

因此,waitpid()的行為取決於其參數。

暫無
暫無

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

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