在python中创建进程,只有它不存在

问题描述 投票:2回答:1

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

它创建一个子进程,它应该能够持续超过其父进程。但是如果它已经在运行,它不应该创建这样的子进程(如果先前的父进程创建了它就会发生)。

我可以想到几种不同的方法来解决这个问题:

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

但它们似乎都不能完全满足我的需求。如果子进程是其父进程的分支,则解决方案(1)无法正常工作。解决方案(2)很难看,它看起来很容易失败。

在创建进程时提供固定的pid或名称会很棒,因此我总是可以以固定的方式查找系统中的进程,并确定它是否正在运行。但我还没有办法做到这一点。

python linux multiprocessing popen
1个回答
2
投票

“它创建了一个子进程,应该能够持续超过其父进程。”别。

有一个更长寿的服务流程为您创造孩子。通过Unix域套接字与此服务对话。然后它可以用于将文件描述符传递给子项。该服务还可以平凡地确保它只有一个孩子。

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

使用命令名称只需创建一个具有相同名称且不执行任何操作的进程即可轻松执行DoS。由于PID重用,使用PID文件是不明确的。只有拥有等待其子项的主管才能在退出时确保它们正常运行或确保它们正在运行。

© www.soinside.com 2019 - 2024. All rights reserved.