仅在不存在的情况下在python中创建进程

时间:2019-02-19 10:20:09

标签: python linux multiprocessing popen

我有一个python服务器,最终需要后台进程来执行操作。

它创建一个子进程,该进程应比其父进程的持续时间更长。但是,如果它已经在运行,则不应创建这样的子进程(如果以前的父进程创建了它,则可能会发生)。

我可以想到几个解决该问题的方法:

  1. 在创建新进程之前检查所有当前正在运行的进程:Cross-platform way to get PIDs by process name in python
  2. 在子进程启动时写入文件,完成后将其删除。创建子进程之前,请检查文件。

但是它们似乎都不完全符合我的需求。如果子进程是其父进程的分支,则解决方案(1)效果不佳。解决方案(2)很丑陋,看起来很容易失败。

对我来说,在创建进程时提供一个固定的pid或名称对我来说非常好,因此我可以始终以固定的方式在系统中查找该进程,并确定该进程是否在运行。但是我还没有找到一种方法。

1 个答案:

答案 0 :(得分:2)

“它创建一个子进程,该进程应比其父进程的持续时间更长。”别。

具有更长寿命的服务流程将为您创建子代。通过Unix域套接字与该服务对话。然后可以将其用于将文件描述符传递给子级。该服务还可以确保每个孩子只有一个孩子。

这种模式可以用来消除对比父母更长寿的孩子的需要。

使用命令名称仅通过创建一个不执行任何操作的相同名称的进程即可轻松执行DoS。由于PID的重用,使用PID文件是模棱两可的。只有让主管等待孩子的主管才能在他们退出时正确地重新启动他们,或者确保他们正在运行。