#include #include #include #include #include #include "varlib.h" /* execute2.c - includes environmment handling */ int execute(char *argv[]) /* * purpose: run a program passing it arguments * returns: status returned via wait, or -1 on error * errors: -1 on fork() or wait() errors */ { extern char **environ; int pid ; int child_info = -1; if ( argv[0] == NULL ) /* nothing succeeds */ return 0; if ( (pid = fork()) == -1 ) perror("fork"); else if ( pid == 0 ){ environ = VLtable2environ(); signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); execvp(argv[0], argv); perror("cannot execute command"); exit(1); } else { if ( wait(&child_info) == -1 ) perror("wait"); } return child_info; }