如何解决如何存储守护进程? 去中心化集中式
想象一下 Docker。你可以在分离模式(守护进程)下启动一个容器,它会在后台运行。当第一个容器在后台运行时,您可以在分离模式下创建启动一个新容器,它也将在后台运行。您可以使用 docker ps
查看正在运行的容器。此命令输出有关正在运行的容器等的表。
我正在编写一个与 Docker 具有相同概念的程序(不是关于容器,而是关于守护进程)。
假设程序是 abc
,要创建一个新的守护进程,我必须执行 start
命令:
$ abc start
我们可以用同样的命令再次创建一个新进程:
$ abc start
这次,我想列出所有守护进程(很好地格式化为表格)。
这是所需的输出:
$ abc start
abc: Program is starting...
$ abc start
abc: Program is starting...
$ abc list
+---------------------+
| Name | ID |
|===========|=========|
| Daemon #1 | 33454 |
+---------------------+
| Daemon #2 | 42344 |
+---------------------+
(表格的格式不重要)
我的问题是,如何将守护进程存储在某种容器中(而不是在 docker 容器的上下文中。例如,数组)?我想到的一件事是我可以将有关守护进程的信息存储在一个文件中,当用户想要列出守护进程时,程序可以从该文件中读取并显示它。但是,我不确定这种方法。我也不能使用数组,因为它不会在执行到执行时保留其值。
(顺便说一句,用户不应该执行 ps
命令。我想包含有关进程的额外信息,例如我的程序会给每个守护进程一个唯一的 ID。)
解决方法
如何存储守护进程
天上的星星一样多。假设我们区分两种通用方式:
去中心化
每个进程都是独立的、分离的。句柄存储在某个已知的静态绝对位置。
系统服务通常在 /var/run
中存储有关守护进程的 pid 或其他数据。用户服务使用 /tmp
或将其保存在 ~/.somewhere
或 ~/.cache/somewhere/
中。
例如,screen
多路复用器。在我的系统上,screen
保持套接字在 /var/run/screens/S-username/here
处运行屏幕会话。当您运行 screen -list
时,它使用位于 /var/run/screen/S-username/there
的恒定绝对位置的套接字与其他屏幕会话进行通信并列出可用的屏幕会话。与 tmux
类似。
集中式
有一个守护进程一直运行,负责收集和保存所有信息。
例如提到的docker。 dockerd
守护进程一直作为系统守护进程在系统上运行,客户端执行 docker something
仅通过 tcp 或文件套接字向主 docker 守护进程发送一些 HTTP 数据,然后主守护进程执行所有工作将状态转移到客户端,以便向用户显示。与使用 DBus 通信的 NetworkManager 类似。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。