获取刚启动程序的PID在Python中
我需要为一个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并结束这些进程。现在我有几个问题:
- 我提议的解决方案可行吗?如果可以,我该如何获取最近启动的进程的PID?关于存储它们并从文件中获取,这样做可行吗?如果可以,怎么做?
- 你有没有其他的解决方案来解决我的问题?
- 在跨平台方面,想在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。