VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 796|回复: 1

C++ 守护程序

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-8 15:43:07 | 显示全部楼层 |阅读模式

第 1 章 功能介绍1.1 功能
l 守护软件启动时自动启动设定的进程
l 进程退出后,守护软件会自动重新启动
l 可以设定telnet远程登录的用户名和密码
l 可以通过telnet控制守护软件,可以执行的功能参考第二章介绍
1.2 设置
所有信息记录在当前目录下的commonDaemon.ini文件中。文件内容如下。
[setting]
count=2 ;需要启动的进程数量
[1] ;第一个进程的序号为1
name=udpTest ;服务名称,可以根据需要自行定义
process=.\udpTest.exe ;文件名
parameter= ;启动进程时的参数
directory=.\ ;工作目录
auto=1 ;是否自动重启,1:自动重启,0:不自动重启
[2] ;第二个进程的序号为2
name=tcpTest.exe
process=.\tcpTest.exe
parameter=
directory=.\
auto=0
[user] ;远程登录的用户名和密码
user=pwd ;等号左边为用户名,等号右边为密码,不允许空密码
demo=demo
1.3 软件中的常量
l common daemon远程监控LISTEN端口
#define DAEMON_REMOTE_MONITOR_PORT                3411
l 文字输出窗口名称
#define SCREEN_NAME                        "common_daemon"
l 日志保存目录
#define LOG_DIR                        ".\\log"
l 日志文件名
#define LOG_NAME                "common_daemon_log"
l 配置文件名
#define INI_FILENAME                ".\\commonDaemon.ini"
1.4 界面
第 2 章 远程监控命令2.1 功能
通过远程监控软件(telnet)连接并登录后可以执行以下命令:
h 显示帮助信息。
c xxx 停止xxx号服务的检查,停止对xxx号服务的自动重启。
o xxx 开始xxx号服务的检查,启动对xxx号服务的自动重启。
l 列出所有服务,列出所有配置数据。
k xxx 强制关闭指定进程。
2.2 界面
第 3 章 关于程序的说明3.1 启动流程
l 初始化SocketAfxSocketInit
l 初始化各个守护线程:InitDaemonEnv
n 初始化文字输出窗口
n 读取配置信息:glo_iniDaemon.InitData()
n 初始化远程监控监听线程:InitDeamonRemoteMonitor()
l 执行守护线程:RunDaemon
3.2 守护线程执行流程
函数:BOOL RunDaemon(void),完成进程的启动,如果已经启动的进程退出则再次重启。
for(int i=0;i<glo_iniDaemon.m_iMaxProcess;i++)
{//对配置中的每一项进行判断
        if(glo_iniDaemon.m_arrEntry.fAutoStart)
        {
                glo_lockProcess.Access(); //锁定数据,防止多线程同时修改
                if(glo_hProcess == NULL)
                {//进程没有被执行
                        StartProcess(glo_hProcess,i);
                }
                else
                {//检查线程是否已经退出,如果已经退出则重新启动
                        CheckProcess(glo_hProcess,i);
                }
                glo_lockProcess.LeaveAccess(); //接触数据锁定
        }
}
3.3 远程监控服务类3.3.1 远程监控连接元素类
class CDaemonRmtCtrlEle : public CRmtCtrlElement
记录单个连接的相关信息。
3.3.2 远程监控连接管理类
class CDaemonRmtCtrlResMan : public CRmtCtrlResMan
管理所有的连接信息,类中包含有一个CDaemonRmtCtrlEle对象的集合,此外CDaemonRmtCtrlResMan会处理连接信息(CDaemonRmtCtrlEle)集合的同步访问。
3.4 远程监控服务线程
线程函数DWORD DaemonRemoteMonitorThread(UINT uHandle)。
在远程监控建立连接后此函数会被作为线程进行创建。然后完成监控处理工作。
3.5 使用到的其他开发包与类3.6 屏幕输出类
consoleTxtWnd.h
consoleTxtWnd.cpp
3.6.1 资源管理类
resManBase.h
resManBase.cpp 实现资源管理
resManBaseLock.cpp 实现各种访问锁控制
3.6.2 远程连接管理类
rmtCtrlElement.h
rmtCtrlElement.cpp 实现对远程连接资源的管理
3.6.3 Socket功能
socketFun.h
socketFun.cpp

回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-8 15:43:57 | 显示全部楼层
很好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表