previous | start

Summary Example: Execution

This example is similar to shell as it (1) creates a child proces, (2) the child process executes the printCh program passing arguments to it, and (3) the parent waits for the child to finish.

Unlike a shell, this program only executes one command (printCh) and instead of printing a prompt after the command finishes, it prints how the child terminated and its exit value if it terminated normally.

    1   
    2   #include <stdio.h>
    3   #include <stdlib.h>
    4   #include <unistd.h>
    5   #include <string.h>  // for strerror
    6   #include <errno.h>   // for errno!
    7   
    8   int main()
    9   {
   10     // Create a child process to run printCh with command line argument
   11     // of C. Should work just like $ printCh C
   12     pid_t spid, fpid;
   13     char *args[3];
   14     int status;
   15   
   16     args[0] = "printCh";
   17     args[1] = "C";
   18     args[2] = (char *) NULL;
   19   
   20     if ( (spid = fork()) == 0 ) {
   21        execvp("printCh", args);
   22        printf("Error executing printCh\n");
   23        exit(1);
   24     }
   25     fpid = waitpid(spid, &status, 0);
   26   
   27     if ( fpid < 0 ) {
   28       printf("wait error: %s\n", strerror(errno));
   29     }
   30     if ( WIFEXITED(status) ) {
   31        printf("child %d terminated normally with exit value %d\n",
   32                   fpid, WEXITSTATUS(status));
   33     } else {
   34       printf("child %d terminated abnormally\n", spid);
   35     }
   36     return 0;
   37   }


previous | start