可安装的Linux守护进程,如何在C++中创建它们?

cha*_*med 2 c++ linux setup-deployment

可安装的Linux守护进程,如何在C++中创建它们?

我在C++中有一个服务器应用程序,我希望它的行为与Windows服务相同.即,无论用户是否登录,系统启动时都应启动它.在Windows中,有许多C++类能够促进与服务管理器的通信并处理启动/停止/暂停命令.Linux怎么样?另外,我如何轻松部署我的应用程序?我羡慕如何使用apt-get system命令安装一些应用程序,这对于自定义应用程序来说很容易,比如我在一台机器上提供二进制文件然后自动从目标Linux中获取它们......?

预先感谢您的帮助.

小智 8

好的,首先,你需要知道在Windows和Linux中编写服务是非常不同的.首先,在Linux中,"服务"不称为"服务",它们被称为"守护进程".知道了,你可以使用谷歌找到这个非常有用的文件.

至于启动/停止/重启,这里没有通用的预制解决方案.在大多数情况下,守护进程在/ var/run中创建*.pid文件; 这些文件包含其进程标识符"PID".然后编写一个简单的bash脚本,通过从适当的文件中读取pid并向其发送kill信号来控制守护程序的执行.

例如,假设您的守护程序名称是foo.然后它将创建文件/var/run/foo.pid并将其PID写入其中,使用ASCII字符并在末尾附加换行符.您的控制脚本名称将是fooctl,它应支持以下命令:start,stop和restart.也就是说,当你运行时fooctl start,脚本应首先检查相应的pid文件是否存在,如果不存在,则执行启动守护进程所需的任何操作; 当你运行时fooctl stop,它应该从/var/run/foo.pid读取pid并使用该ID终止进程.如果是fooctl restart,您的脚本将需要先停止守护程序,然后再次启动它.

尽管如此,这只是一个关于守护进程应该如何工作的协议.这就是通常的做法.但这些规则并未以任何方式强制执行.您可以自由地发明并使用自己的技术来创建和控制守护进程.

至于你的问题的第二部分(关于apt-get),这称为包管理.它与守护进程无关,但是由于您要求:使用自定义应用程序执行此操作,您需要将其发布到主存储库中,这可能由于多种原因而无法实现; 或者你可以创建自己的回购.您也可以为您的应用程序组装一个*.deb包,它也很容易安装.在网上搜索有关如何为自定义Linux应用程序构建包的更多信息.

  • 当然,你可以暂停或恢复你的守护进程,你可以在退出前进行清理工作.这是在信号的帮助下完成的.请参阅此维基百科文章:http://en.wikipedia.org/wiki/Signal_%28computing%29"kill"命令用于向您的流程发送信号,您的流程可以使用信号处理程序按照自己的意愿解释信号(请看这里的例子:http://www.codeguru.com/forum/showthread.php?t = 465662). (4认同)
  • @charfeddine.ahmed Windows 做什么或不做什么完全无关,因为没有人真正认为它是一个严肃的操作系统。将 Linux 与 Windows 进行比较,就像将布拉格城堡与修补不当的茅草屋进行比较,该茅屋有不同的一群被误导的希望者,每个学期都在随机的地方拔出稻草,并在别处戳其他稻草,直到没有人真正记得是否曾经有过计划,也没有人能看到前进的道路,所以他们最终会找出消费者最讨厌的东西,并重新包装这些组件以适应最新的时尚。 (2认同)