fork () вызывает недетерминированное c поведение: дочерний процесс не выполняется - PullRequest
1 голос
/ 04 августа 2020

У меня очень простая c программа:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[] ){
    int rc = fork();

    if (rc < 0){
        // fork failed
        fprintf(stderr, "fork failed\n");
    } else if (rc == 0) {
        printf("hi, I'm child! %d\n", (int) getpid());
        fflush(stdout);
    } else {
        printf("hi, I'm the parent of %d\n", rc);
        fflush(stdout);
    }
    return 0;
}

По какой-то причине, когда я компилирую и запускаю эту программу, иногда будут отображаться оба оператора печати, но в других случаях будет отображаться только родительский процесс .

Почему это? Даже если я не использую wait(), оба процесса все равно должны работать.

Использование g cc 7.5.0 ubuntu 18.04

1 Ответ

2 голосов
/ 04 августа 2020

Потому что среда IDE перестает прослушивать, когда родительский процесс закрывается или оболочка оставляет дочерний процесс в фоновом режиме.

Чтобы увидеть произвольный порядок printf:

        int status;
        printf("hi, I'm the parent of %d\n", rc);
        fflush(stdout);
        waitpid(pid, &status, 0);
...