supervisor stop父进程的同时, 也stop掉子进程

用python的multiprocessing模块把服务改成多进程后, 遇到几个问题:

  1. 数据库连接失败, 总是在服务运行几十秒后, 卡主, 然后报错数据库连接失败
    InterfaceError: (0, '')
    检查后发现, 是把数据库连接的操作放到while循环中了, 创建了大量的连接导致的

  2. 服务是用supervisor工具来启动的, 当用stop停掉这个含子进程的 服务时, 用ps查看, 发现只kill掉了父进程, 但是子进程仍然在后台跑着

  • 首先,怀疑是不是守护进程的问题, 查看multiprocessing模块, p.daemon默认是False, 也就表示, 默认不是守护进程

  • 这里解释一下守护进程, 如果一个子进程设置为守护进程, 那么当父进程结束时, 子进程不会随父进程退出, 守护进程也被称为精灵进程

  • 回到问题, 这里默认就设置了 daemon=False, 所以也不是这个问题导致

  • 然后又发现, 用ctrl+C 结束进程, 就不会出现这种情况, 所以, 问题就指向了supervisor

解决方法:
  • 在supervisor的配置中(是指当前服务的配置), 添加两条
    killasgroup=true
    stopasgroup=true
    然后别忘了在supervisorctl的控制台中, update一下
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • supervisor 是由python语言编写、基于linux操作系统的一款服务器管理工具,用以监控服务器的运行,...
    每次哭都笑着奔跑阅读 6,351评论 6 14
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 6,033评论 3 28
  • 进程 操作系统背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作...
    go以恒阅读 967评论 0 2
  • 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概...
    SlashBoyMr_wang阅读 1,171评论 0 2
  • 1.感恩镇司法所李所长、苏所长到我村开展扶贫工作,分别到帮扶对象家中了解其生产、生活等各方面情况,非常认真仔细,真...
    远山野村阅读 184评论 0 1