#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <error.h> #include <errno.h> #include <sys/wait.h> void __attribute_noinline__ noop (void); #define NR 2 /* Exit code of the child. */ int main (void) { pid_t pid; int status; printf ("Before vfork\n"); fflush (stdout); pid = vfork (); if (pid == 0) { /* This will clobber the return pc from vfork in the parent on machines where it is stored on the stack, if vfork wasn't implemented correctly, */ noop (); _exit (NR); } else if (pid < 0) error (1, errno, "vfork"); printf ("After vfork (parent)\n"); if (waitpid (0, &status, 0) != pid || !WIFEXITED (status) || WEXITSTATUS (status) != NR) exit (1); return 0; } void noop (void) { }