
监控
服务程序是一种在后台持续运行的程序,它不直接与用户交互,而是为操作系统或者应用程序提供基础功能,是现代操作系统的重要组成部分。其负责执行诸多关键任务,像监听网络请求、管理系统资源、
监控系统状态以及执行计划任务等。一般而言,服务程序具备以下主要特征。后台运行:服务程序在后台悄悄运行,不会直接呈现图形界面,也不和用户直接互动,如此一来,用户就能在前台不受干扰地开展其他操作。长期运行:服务程序被设计成能够长时间持续运行,除非出现严重错误或者被手动停止,不然它就会一直为我们提供服务。自启动:不少服务程序被设定为随着系统启动就自动运行,这能保证系统启动时必要的功能和服务就可以使用。无用户界面:与常规应用程序不同,服务程序一般没有图形用户界面(GUI),而是借助配置文件、命令行工具或者系统服务管理界面等来进行配置和管理。在
Windows和
linux下开发服务程序有着明显的区别。
Windows服务依靠Win API,例如CreateService、StartService等函数;而
linux服务通常与POSIX标准API交互,或者使用特定于systemd的API函数。若要封装服务包装类,首先要封装一个服务基类CHP_BaseService。CHP_BaseService类和下面的服务包装类CHP_ServiceWrapper配合使用,能够生成
Windows上的服务程序或者
linux上的后台守护进程。CHP_BaseService类的头文件,可以参考如下示例代码。从中能够发现,CHP_BaseService是一个纯虚类,包含两个纯虚函数。Start:启动服务的各项功能,派生类必须实现这个接口。其中参数argc为程序入口参数的个数,参数argv为程序入口参数。返回值为0表示成功,其他为错误码。Stop:停止服务的各项功能,派生类必须实现这个接口。为了让服务包装类在
Windows、
linux操作系统下都能正常使用,就需要将
Windows、
linux服务接口的差异封装起来,给上层提供一个统一的接口。CHP_ServiceWrapper类的头文件,可以参考如下示例代码。可以看到,CHP_ServiceWrapper类的导出接口非常简单,除了构造函数和析构函数之外,仅有一个Run函数。