Reputation: 503
#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