获取Python中刚刚启动的程序的pid

获取Python中刚刚启动的程序的pid,python,scripting,Python,Scripting,我需要为python程序创建启动和停止脚本。我的临时解决方案是启动。sh: python -m root.scripts.run python server.py 'localhost' 42345 这将启动我的程序和一个服务器,该服务器需要进行一些计算。现在,对于stop.sh,我只需要: killall -m Python killall python killall Python 这起作用并停止我的程序。然而,我需要找到一个不那么残酷的解决方案,因为这显然会杀死所有与python相关

我需要为python程序创建启动和停止脚本。我的临时解决方案是启动。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并杀死那些进程。现在我有几个问题:

我提出的解决方案可行吗?如果是这样,如何获取最近启动的进程的pid?就存储它们然后从文件中获取它们而言,这是否可行?如果可行,如何实现? 对于我的问题,你还有其他的解决方案吗? 就跨平台而言,在windows上模仿这样的东西有多难? 使用模块从Python启动程序无论如何,这是推荐的方法。从subprocess.Popen返回的对象具有terminate和kill方法以及一个pid属性,您可以保存该属性并使用该属性再次停止进程

在UNIX系统上,您可以考虑将PID保存在/Va/Run/.PID中的文件中,然后在请求停止时读取该文件来检索PID。< /P> < P>使用Python启动该模块,无论如何,这是推荐的方式。从subprocess.Popen返回的对象具有terminate和kill方法以及一个pid属性,您可以保存该属性并使用该属性再次停止进程


在UNIX系统上,您可以考虑将PID保存在/Va/Run/.PID中的文件中,然后在请求停止时读取该文件以检索PID。使用subprocess.Popen运行新进程,并终止以终止它们


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

我将用运行这两个脚本的Python脚本替换startup.sh。使用subprocess.Popen运行新进程,并终止以终止它们


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

谢谢您的输入。但我不确定我是否理解你的建议。所以你是说我应该用python脚本替换startup.sh shell脚本。然后在这个python脚本中使用subprocess.Popenroot.scripts.runsubprocess.Popenserver.py。从这里我得到我的PID,并将它们存储在某个地方。然后用python脚本替换stop.sh shell,获取那些PID并终止进程。这是对的吗?也许我误解了你的问题。为什么不在现有脚本的基础上编写一个init shell脚本呢?例如,Debian系统附带了一个骨架文件/etc/init.d/skeleton,您可以轻松地调整它来启动Python程序。但我不确定我是否理解你的建议。所以你是说我应该用python脚本替换startup.sh shell脚本。然后在这个python脚本中使用subprocess.Popenroot.scripts.runsubprocess.Popenserver.py。从这里我得到我的PID,并将它们存储在某个地方。然后用python脚本替换stop.sh shell,获取那些PID并终止进程。这是对的吗?也许我误解了你的问题。为什么不在现有脚本的基础上编写一个init shell脚本呢?例如,Debian系统附带了一个骨架文件/etc/init.d/skeleton,您可以轻松地适应它来启动Python程序。我的意思是用户应该能够调用python start_program.py来启动应用程序。然后,如果出现问题或他只是想停止,他会停止python_program.py。您的建议是只创建一个Python脚本,其启动方式与Python app.py start和Python app.py stop?完全一样。这就是想法:使用app.py[start | stop]并从命令行解析参数。您甚至可以通过使用模块添加更多标志或参数。这种方法适用于Linux和Windows,但我需要能够分别调用start和stop。我的意思是用户应该能够调用python start_program.py来启动应用程序。然后,如果出现问题或他只是想停止,他会停止python_program.py。您的建议是只创建一个Python脚本,其启动方式与Python app.py start和Python app.py stop?完全一样。这就是想法:使用app.py[start | stop]并从命令行解析参数。您甚至可以通过使用模块添加更多标志或参数。这种方法适用于Linux和Windows。