在Python中开始获取程序的pid

时间:2011-08-04 06:46:18

标签: 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我会得到那些pid并杀死那些进程。现在我有几个问题:

  1. 我建议的解决方案是否可行?如果是这样,我如何获得最近启动的流程的pid?在存储它们然后从文件中获取它们时,这是否可行,如果是这样的话?
  2. 您对我的问题有任何其他建议的解决方案吗?
  3. 在跨平台方面,在Windows上模仿这样的东西有多难?
  4. 此致 波格丹

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

我会将你的startup.sh替换为运行这两个脚本的Python脚本。使用subprocess.Popen()来运行新进程,使用terminate()来终止它们。

Python解决了你的第三个问题。否则你必须在Windows下使用cygwin / mingw。