如何使用python脚本启动/终止应用程序?
我使用Linux(LMDE),我想知道如何使用simple.py脚本来启动和停止另一个python应用程序。例如:如何使用python脚本启动/终止应用程序?,python,linux,debian,Python,Linux,Debian,我使用Linux(LMDE),我想知道如何使用simple.py脚本来启动和停止另一个python应用程序。例如: if pyApp is running : kill pyApp exit xterminal else : start xterminal python pyApp.py 它适合python还是应该使用bash?这在python中使用os.kill和os.spawn的变体是完全可行的 独立于实现的概念(无论您选择的是Python还是bash还是其他东西
if pyApp is running :
kill pyApp
exit xterminal
else :
start xterminal
python pyApp.py
它适合python还是应该使用bash?这在python中使用
os.kill
和os.spawn
的变体是完全可行的 独立于实现的概念(无论您选择的是Python还是bash还是其他东西,您都需要知道):
为了可靠地“杀死”另一个进程,您需要知道它的进程ID,然后向它发送一个信号(例如sigger)。它取决于另一个进程如何处理sigger(它可以忽略它,但也可以调用关闭代码并正确终止)。信号SIGKILL以艰难的方式杀死另一个进程,它没有任何机会彻底关闭
为了从给定的可执行文件启动另一个进程,您需要知道该可执行文件的路径,或者该可执行文件必须是有效的命令(可以通过path
环境变量控制)
如果pyApp正在运行,则您的行需要了解要监视并最终终止的应用程序的进程ID(PID)。仅通过名称识别PID可以工作,但不可靠(可能有多个进程具有相同的名称)。为了在进程ID和您感兴趣的应用程序之间建立可靠的对应关系,监控“脚本”应该是首先启动应用程序的脚本。它应该是完全管理应用程序的程序。一个好的参考是
bash详细信息
在bash中,您可以使用$获取上次启动的进程的进程ID代码>。大多数系统还具有pgrep
或pidof
命令,您可以通过这些命令找到具有特定名称的进程ID
一个简单的习语是:
app & # Start a new process with your app in the background.
APP_PID=$! # Remember its PID.
kill $APP_PID # Send SIGTER to process.
import subprocess
p = subprocess.Popen(["tail", "-f", "~/.bashrc"])
print "Process ID of subprocess %s" % p.pid
# Send SIGTER (on Linux)
p.terminate()
# Wait for process to terminate
returncode = p.wait()
print "Returncode of subprocess: %s" % returncode
Python详细信息
在Python中,我建议使用子流程
模块。您可以通过p=subprocess.Popen(…)
生成任何可执行文件。然后,您可以以编程方式控制子流程(将数据发送到stdin,终止流程,检索其PID供以后使用,获取其退出代码,…)
同样,一个简单但可靠的工作示例是:
app & # Start a new process with your app in the background.
APP_PID=$! # Remember its PID.
kill $APP_PID # Send SIGTER to process.
import subprocess
p = subprocess.Popen(["tail", "-f", "~/.bashrc"])
print "Process ID of subprocess %s" % p.pid
# Send SIGTER (on Linux)
p.terminate()
# Wait for process to terminate
returncode = p.wait()
print "Returncode of subprocess: %s" % returncode
如果您需要保持简单并使用Linux,我将首先在bash中实现一个基本解决方案。您可能会得到更少的代码。在这两种情况下,你都可能犯严重的错误。最后,这是一个品味问题。可以直接在shell脚本中使用相应的命令,而不是在Python中使用这些基本的OS命令。如果你想使用Python,你应该使用它的子流程
模块来完成这些任务。我感谢你花时间如此广泛地澄清这件事。bash是否可以接受if,else…?您的意思是bash是否支持条件语句?当然,看起来您必须完成一个非常基本的bash教程…:-)。