python - 获取刚在Python中启动的程序的pid

标签 python scripting

我需要为 python 程序创建启动和停止脚本。我的临时解决方案是使用 startup.sh:

python -m root.scripts.run 
python server.py 'localhost' 42345

这将启动我的程序和执行某些计算所需的服务器。现在对于 stop.sh 我只是这样做:

killall -m Python
killall python
killall Python

这有效并停止了我的程序。但是我需要找到一个不那么“残酷”的解决方案,因为这显然会杀死所有与 python 相关的进程。我正在考虑的一个解决方案(不确定是否可能)是在 startup.sh 中获取两个启动进程的 PID 并将它们存储在某个文件中。然后对于 stop.sh 我会得到那些 pids 并杀死那些进程。现在我有几个问题:

  1. 我提出的解决方案可行吗?如果是这样,我怎样才能获得最近启动的进程的 pid?就存储它们然后从文件中获取它们而言,这是否可行?如果可行,如何实现?
  2. 对于我的问题,您还有其他建议的解决方案吗?
  3. 在跨平台方面,在 Windows 上模仿这样的东西有多难?

最佳答案

使用 subprocess 模块从 Python 启动程序(无论如何这是推荐的方式)。从 subprocess.Popen 返回的对象有terminate()kill()方法以及 pid您可以保存并用于再次停止进程的属性。

在 Unix 系统上,您可以考虑将 PID 保存在 /var/run/<yourscript>.pid 中的文件中(请参阅 Filesystem Hierarchy Standard),然后在请求停止时读取此文件以检索 PID。

关于python - 获取刚在Python中启动的程序的pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6937245/

相关文章:

Python SQL 语法错误

python - 使用 Python 匹配拆分 RAR 扩展

regex - 使用 awk sed 或 grep 从网页源解析 URL

python - 从 django 中的表中过滤掉空值

python - Odoo 外部 API 搜索和阅读不起作用

python - plotly python中的多个绘图错误

bash - 从字符串中提取版本号

scripting - 我可以在 Visual Studio 中运行 fsx 文件而不设置项目吗?

C++:排序/字母排序方法

python - 字符串格式占位符可最大程度地兼容 python 2.6、2.7 和 3.x