我正在尝试在python中编写一些短脚本,如果尚未启动该脚本,则会在子进程中启动另一个python代码,否则终止终端机和应用程序(Linux)。
所以看起来像:
#!/usr/bin/python
from subprocess import Popen
text_file = open(".proc", "rb")
dat = text_file.read()
text_file.close()
def do(dat):
text_file = open(".proc", "w")
p = None
if dat == "x" :
p = Popen('python StripCore.py', shell=True)
text_file.write( str( p.pid ) )
else :
text_file.write( "x" )
p = # Assign process by pid / pid from int( dat )
p.terminate()
text_file.close()
do( dat )
应用缺少从文件 “ .proc”中 读取的pid来命名进程的知识,存在问题。另一个问题是解释器说名为 dat的 字符串不等于 “ x”
?我错过了什么?
使用很棒的psutil
库非常简单:
p = psutil.Process(pid)
p.terminate() #or p.kill()
如果您不想安装新的库,可以使用以下os
模块:
import os
import signal
os.kill(pid, signal.SIGTERM) #or signal.SIGKILL
另请参阅os.kill
文档。
如果您有兴趣在命令python StripCore.py
未运行时启动 它,否则将其杀死,则可以psutil
可靠地使用它。
就像是:
import psutil
from subprocess import Popen
for process in psutil.process_iter():
if process.cmdline() == ['python', 'StripCore.py']:
print('Process found. Terminating it.')
process.terminate()
break
else:
print('Process not found: starting it.')
Popen(['python', 'StripCore.py'])
样品运行:
$python test_strip.py #test_strip.py contains the code above
Process not found: starting it.
$python test_strip.py
Process found. Terminating it.
$python test_strip.py
Process not found: starting it.
$killall python
$python test_strip.py
Process not found: starting it.
$python test_strip.py
Process found. Terminating it.
$python test_strip.py
Process not found: starting it.
注意 :在以前的psutil
版本中,cmdline
是 属性 而不是方法。
问题内容: 我正在使用以下命令启动子流程: 但是,当我尝试杀死使用: 要么 该命令一直在后台运行,所以我想知道如何才能真正终止该过程。 请注意,当我使用以下命令运行命令时: 发出时,它确实成功终止。 问题答案: 使用进程组,以便能够向组中的所有进程发送信号。为此,你应该将会话ID附加到派生/子进程的父进程中,在你的情况下,这是一个外壳程序。这将使其成为流程的小组负责人。因此,现在,当信号发送到流程
我有一个应用Gradle插件的项目。我的问题是,即使底层进程终止,它也不会终止:如果我运行这个: 带有仅包含系统的主系统。退出(0) 程序终止,但Gradle没有终止。当底层Java程序终止时,如何强制Gradle进程终止? 编辑:我知道我可以调用gradle——stop,但这需要另一个进程,这不是一个选项。
我写了一个程序在IDLE令牌化文本文件,它开始令牌349文本文件!我怎样才能阻止它?如何停止正在运行的Python程序?
问题内容: 我遇到了一个问题。有时,当我的JUnit测试正在运行时,请命令webDriver.quit();。不会杀死chromedriver进程,因此下一个测试无法开始。在那种情况下,我想添加一些可以在Linux上手动终止进程的方法,但是我不知道如何获取chromedriver的PID,因此可以执行以下操作:Runtime.getRuntime()。exec(KILL + PID); 问题答案:
问题内容: 强制保持Node.js进程运行的最佳方法是什么,即使其事件循环不为空,从而防止进程终止?我能想到的最好的解决方案是: 如果您将间隔时间保持足够长,它将使间隔运行,而不会引起过多干扰。 有更好的方法吗? 问题的长版 我有一个使用Edge.js来注册回调函数的Node.js脚本,以便可以从.NET中的DLL内部对其进行调用。每秒将调用此功能1次,发送一个应打印到控制台的简单序列号。 Edg
问题内容: 我正在学习如何使用Python多处理库。但是,当我浏览一些示例时,最终我在后台运行了许多python进程。 其中的例子看起来象下面这样: 现在,这是我的“ TOP”命令的屏幕截图: 我不知道如何一口气杀死他们。 ps … | grep python ....杀死吗? 我需要添加哪种python代码,以避免再次发生这种悲惨的情况。谢谢! 问题答案: 您需要在工作队列中处理您的进程,该进程