原文:http://blog.chinaunix.net/uid-26588712-id-3196464.html
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <errno.h> 4 #include <string.h> 5 #include <sys/types.h> 6 #include <sys/wait.h> 7 #include <stdlib.h> 8 9 int 10 main(int argc, char **argv) 11 { 12 int ret, i, status; 13 char *child_argv[100] = {0}; 14 pid_t pid; 15 if (argc < 2) { 16 17 fprintf(stderr, "Usage:%s <exe_path> <args...>\n", argv[0]); 18 return -1; 19 } 20 for (i = 1; i < argc; ++i) { 21 child_argv[i-1] = (char *)malloc(strlen(argv[i])+1); 22 strncpy(child_argv[i-1], argv[i], strlen(argv[i])); 23 child_argv[i-1][strlen(argv[i])] = '\0'; 24 } 25 while(1){ 26 27 pid = fork(); 28 if (pid == -1) { 29 fprintf(stderr, "fork() error.errno:%d error:%sn\n", errno, strerror(errno)); 30 break; 31 } 32 if (pid == 0) { 33 ret = execv(child_argv[0], (char **)child_argv); 34 //ret = execl(child_argv[0], "portmap", NULL, 0); 35 if (ret < 0) { 36 fprintf(stderr, "execv ret:%d errno:%d error:%sn \n", ret, errno, strerror(errno)); 37 continue; 38 } 39 exit(0); 40 } 41 42 if (pid > 0) { 43 pid = wait(&status); 44 45 fprintf(stdout, "wait return"); 46 } 47 48 } 49 50 51 return 0; 52 }