waltermitty
waltermitty

Reputation: 503

vfork doesn't work as expected on OSX, how to explain?

#include "apue.h"

int globvar = 6;

int main(void) {
    int var;
    pid_t pid;

    var = 99;
    printf("before vfork\n");
    if ((pid = vfork()) < 0) {
        err_sys("vfork error");
    } else if (pid == 0) {
        globvar++;
        var++;
        printf("in child process:\n");
        printf("pid = %ld, glob = %d, var = %d\n", (long)getpid(), globvar, var);

        _exit(0);
    }
    printf("in parent process:\n");
    printf("pid = %ld, glob = %d, var = %d\n", (long)getpid(), globvar, var);
    exit(0);
}

I tested this code on macOS(Monterey 12.6), the output is:

before vfork
in parent process:
pid = 10540, glob = 6, var = 99
in child process:
pid = 10541, glob = 7, var = 100

vfork should ensure that child process execute first. Why parent log first? Could anyone explain it for me? Thanks in advance.

Upvotes: 1

Views: 242

Answers (0)

Related Questions