日期:2014-05-16 浏览次数:20839 次
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