【浅谈守护进程】Demo:后台监控程序-- Python实现

前言

最近在做的项目需要定期检测某个进程是否运行,若挂了自动重启,脑袋一拍觉得需要这样一个守护进程 来进行监控,于是顺便复习了一下守护进程。

正文

什么是守护进程?

守护进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。
—–《APUE》

我们需求就是默默地定期执行任务 与守护进程非常的匹配。

编写一个守护进程


守护进程需要

  1. 设置文件模式创建屏蔽字。
  2. 没有控制终端。
  3. 确定工作目录。
  4. 关闭不再需要的文件描述符。
  5. 告别标准输入输出

如何实现

文件模式屏蔽字

只需要通过umask() 即可,由继承(至于为什么是继承,请看后面)得到的文件模式创建屏蔽字可能已经被修改为拒绝某些权限,所以我们最好根据需要进行重新设置。

甩掉控制终端

我们希望守护进程在后台默默运行不受控制终端的控制。这里是通过setsid() 函数来实现。调用这个函数的效果是:

1)创建一个新会话(session)
2)创建一个新进程组。
3)调用进程成为 新会话 的首进程
4)调用进程成为 新进程组 的组长进程
5)调用进程失去控制终端

最后一条正是我们需要的效果,但这个函数也有前提条件。那就是调用函数不能是进程组的组长进程,为了达到这个条件,我们通常的做法是,首先调用fork() 然后父进程退出,由子进程来

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这个命令有几个错误: 1. `-p` 选项应该放在 `docker run` 命令的最后面,因为它用来映射端口。 2. `-v` 选项后面的挂载路径应该是这样的: `-v /opt/python3.6/demo/aMedicalBot_demo_quesoar:/app` 3. 在这个命令里面使用了一个多余的 `/bin/bash`,这个参数是在你想要在容器里面执行一个 shell 命令的时候用的, 但在这里似乎没有什么必要。 正确的命令应该是这样的: ``` docker run -itd --name aMedicalBot -p 5005:5005 -v /opt/python3.6/demo/aMedicalBot_demo_quesoar:/app python:3.8-buster ``` 如果你想要在容器里面执行命令你需要在run 后面加上你需要执行的命令,如下面这样: ``` docker run -itd --name aMedicalBot -p 5005:5005 -v /opt/python3.6/demo/aMedicalBot_demo_quesoar:/app python:3.8-buster /bin/bash ``` ### 回答2: 在这个命令中,有一个语法错误。正确的命令应该是使用-d参数后紧随镜像名称,并且使用--name参数后指定容器名称,然后才是其他的选项参数。 正确的docker命令是: ``` docker run -itd --name aMedicalBot -p 5005:5005 -v /opt/python3.6/demo/aMedicalBot_demo_quesoar:/app python:3.8-buster /bin/bash ``` 修正后的命令将会创建一个名为"aMedicalBot"的容器,使用"python:3.8-buster"镜像,并设置端口映射(将主机的5005端口映射到容器的5005端口),同时将主机路径"/opt/python3.6/demo/aMedicalBot_demo_quesoar"挂载到容器内的"/app"路径下。最后,容器将以交互模式运行并启动"/bin/bash"。 ### 回答3: 原始的docker run命令的语法存在一些错误。正确的命令应该是: docker run -itd --name aMedicalBot -p 5005:5005 -v /opt/python3.6/demo/aMedicalBot_demo_quesoar:/app python:3.8-buster /bin/bash 以下是对命令中的错误进行更正的解释: 1. -p 参数应该位于容器名称(aMedicalBot)和镜像名称(python:3.8-buster)之间。 2. -v 参数与容器名称(aMedicalBot)和镜像名称(python:3.8-buster)之间应该没有空格。 3. 镜像名称(python:3.8-buster)应该紧随 -v 参数之后。 4. 将 /bin/bash 移到镜像名称(python:3.8-buster)之后。 正确的命令将会将容器命名为aMedicalBot,并在主机的端口5005上将主机的/opt/python3.6/demo/aMedicalBot_demo_quesoar目录挂载到容器的/app目录中。容器将使用python:3.8-buster镜像,并在后台运行/bin/bash作为启动命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值