现在的位置: 首页 > 综合 > 正文

【转】linux监控程序-程序自动重启方法

2014年01月10日 ⁄ 综合 ⁄ 共 975字 ⁄ 字号 评论关闭

原文: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     }

抱歉!评论已关闭.