获取刚启动程序的PID在Python中

1 投票
2 回答
2763 浏览
提问于 2025-04-16 22:51

我需要为一个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(进程ID),并把它们存储在某个文件里。然后在stop.sh中,我只需要获取这些PID并结束这些进程。现在我有几个问题:

  1. 我提议的解决方案可行吗?如果可以,我该如何获取最近启动的进程的PID?关于存储它们并从文件中获取,这样做可行吗?如果可以,怎么做?
  2. 你有没有其他的解决方案来解决我的问题?
  3. 在跨平台方面,想在Windows上模仿这样的操作难度有多大?

2 个回答

1

我建议用一个Python脚本来替代你的startup.sh,这个Python脚本可以同时运行两个脚本。你可以用subprocess.Popen()来启动新的进程,用terminate()来结束它们。

Python可以解决你的第三个问题。否则的话,你需要在Windows下使用cygwin或mingw。

4

可以使用subprocess模块来从Python启动程序(这也是推荐的方式)。通过subprocess.Popen返回的对象有terminate()kill()这两个方法,还有一个pid属性,你可以保存这个属性,用来再次停止这个进程。

在Unix系统上,你可以考虑把PID保存在/var/run/<yourscript>.pid这个文件里(具体可以参考文件系统层次标准),然后在需要停止的时候读取这个文件来获取PID。

撰写回答