日期:2014-05-16 浏览次数:20758 次
1、shutdown 2、poweroff 3、init 4、reboot 5、halt
#./portmap 需要监控的程序的路径 #args portmap 需要的参数 $ ./supervisor ./portmap args.....代码如下: /** * * supervisor * * author: liyangguang (liyangguang@software.ict.ac.cn) * * date: 2011-01-21 21:04:01 * * changes * 1, execl to execv */ #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <stdlib.h> int main(int argc, char **argv) { int ret, i, status; char *child_argv[100] = {0}; pid_t pid; if (argc < 2) { fprintf(stderr, "Usage:%s <exe_path> <args...>n", argv[0]); return -1; } for (i = 1; i < argc; ++i) { child_argv[i-1] = (char *)malloc(strlen(argv[i])+1); strncpy(child_argv[i-1], argv[i], strlen(argv[i])); child_argv[i-1][strlen(argv[i])] = ''; } while(1){ pid = fork(); if (pid == -1) { fprintf(stderr, "fork() error.errno:%d error:%sn", errno, strerror(errno)); break; } if (pid == 0) { ret = execv(child_argv[0], (char **)child_argv); //ret = execl(child_argv[0], "portmap", NULL, 0); if (ret < 0) { fprintf(stderr, "execv ret:%d errno:%d error:%sn", ret, errno, strerror(errno)); continue; } exit(0); } if (pid > 0) { pid = wait(&status); fprintf(stdout, "wait return"); } } return 0; } shell脚本方式的代码如下: 代码如下 复制代码 # 函数: CheckProcess # 功能: 检查一个进程是否存在 # 参数: $1 --- 要检查的进程名称 # 返回: 如果存在返回0, 否则返回1. #------------------------------------------ CheckProcess() { # 检查输入的参数是否有效 if [ "$1" = "" ]; then return 1 fi
PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` if [ $PROCESS_NUM -eq 1 ]; then return 0 else return 1 fi } # 检查test实例是否已经存在 while [ 1 ] ; do CheckProcess "test" CheckQQ_RET=$? if [ $CheckQQ_RET -eq 1 ]; then # 杀死所有test进程,可换任意你需要执行的操作 killall -9 test exec ./test & fi sleep 1 done