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

标签 c++ linux setup-deployment

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

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

预先感谢您的帮助。

最佳答案

好的,首先,您需要知道在 Windows 和 Linux 中编写服务是非常不同的。首先,在Linux中,“服务”不叫“服务”,叫“守护进程”。知道了,你可以用谷歌搜索find this extremely useful document .

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

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

总而言之,这只是关于守护进程应该如何工作的协议(protocol)。这就是通常的做法。但这些规则并没有以任何方式得到执行。您可以自由发明和使用自己的技术来创建和控制守护进程。

至于你问题的第二部分(关于apt-get),这叫做包管理。它与守护进程无关,但既然你问过:要用你的自定义应用程序来做,你需要将它发布到主存储库中,由于多种原因这可能是不可能的;或者您可以创建自己的 repo 协议(protocol)。您也可以为您的应用程序组装一个 *.deb 包,安装起来同样容易。在网上搜索有关如何为自定义 Linux 应用程序构建包的更多信息。

关于c++ - 可安装的 Linux 守护进程,如何在 C++ 中创建它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729230/

相关文章:

c++ - 增量决策树 C++ 实现

c++ - 具有引用模板参数的函数模板

c++ - 如何摆脱堆栈溢出错误

linux - 当子进程接触变量元数据时,如何防止内存爆炸?

java - 使用 JBoss 7.1 作为域 Controller 部署到实例

java - 在 java swing 应用程序中创 build 置

c++ - 无法使 decltype 说明符在 lambda 函数内正常工作

c++ - 如何在linux上打包c++依赖

linux - 在 sqlite3 中更新或插入

c# - 如何在网络上的所有机器上安装 .NET Windows Forms 应用程序?