(root)/
glibc-2.38/
posix/
test-vfork.c
       1  #include <stdio.h>
       2  #include <stdlib.h>
       3  #include <unistd.h>
       4  #include <error.h>
       5  #include <errno.h>
       6  #include <sys/wait.h>
       7  
       8  void __attribute_noinline__ noop (void);
       9  
      10  #define NR	2	/* Exit code of the child.  */
      11  
      12  int
      13  main (void)
      14  {
      15    pid_t pid;
      16    int status;
      17  
      18    printf ("Before vfork\n");
      19    fflush (stdout);
      20    pid = vfork ();
      21    if (pid == 0)
      22      {
      23        /* This will clobber the return pc from vfork in the parent on
      24  	 machines where it is stored on the stack, if vfork wasn't
      25  	 implemented correctly, */
      26        noop ();
      27        _exit (NR);
      28      }
      29    else if (pid < 0)
      30      error (1, errno, "vfork");
      31    printf ("After vfork (parent)\n");
      32    if (waitpid (0, &status, 0) != pid
      33        || !WIFEXITED (status) || WEXITSTATUS (status) != NR)
      34      exit (1);
      35  
      36    return 0;
      37  }
      38  
      39  void
      40  noop (void)
      41  {
      42  }