守护进程如何实现监视,一发现自己异常退出就重新启动

C/C++代码

	STARTUPINFO si;
	PROCESS_INFORMATION pi; //进程信息: 
	ZeroMemory(&si, sizeof(si)); 
	si.cb = sizeof(si); 
	ZeroMemory(&pi, sizeof(pi)); 
	do{
		// 创建子进程,判断是否执行成功
		if(!CreateProcess( NULL,"xxx.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))		{
			return;
		} 
		// 等待知道子进程退出... 
		WaitForSingleObject( pi.hProcess, INFINITE);//检测进程是否停止 
		//子进程退出 
		//关闭进程和句柄 
		CloseHandle(pi.hProcess);
		CloseHandle(pi.hThread);
	}while(true);//如果进程推出就再次执行方法 

  

perl脚本

while true
do
    ps -ef|grep -v grep|grep yourexe
    if [ $? -ne 0 ]; then
        重启你的程序
    fi
    sleep 10
done

  

shell脚本

while( 1 )
{
    if( kill(pid_to_be_check, 0) < 0 ) system("重启命令");
    sleep(10);
}

kill() 并不是一定会像它的名字那样来杀进程。。
第二个参数为0,表示仅仅检测进程是否存在
那个pid_to_be_check 你需要通过其他途径获取

posted on 2014-03-25 15:00  一个石头  阅读(1227)  评论(0)    收藏  举报