【问题标题】:Python: kill subprocess does not work (wrong PID)Python:杀死子进程不起作用(错误的PID)
【发布时间】:2018-12-14 04:19:07
【问题描述】:

我正在尝试从 Python 程序启动 .exe,让它运行几秒钟然后将其终止。我正在使用subprocess 库。这是我所做的(简而言之):

import subprocess

p = subprocess.Popen('start /b .\ssf.exe', shell=True)
time.sleep(5)
p.terminate()

我也试过p.kill(),但没有任何运气。

另外,当我 print(p.pid) 时,它与我在进程列表中找到的 PID 不同...有人能告诉我为什么这不起作用吗?

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    试试这个:

    import os
    import signal
    import subprocess
    
    p = subprocess.Popen('start /b .\ssf.exe', shell=True, preexec_fn=os.setsid)
    time.sleep(5)
    os.killpg(os.getpgid(p.pid), signal.SIGTERM) 
    

    【讨论】:

    • 我在 Stackoverflow 上也找到了该解决方案,但它对我不起作用:AttributeError: module 'os' has no attribute 'killpg'
    • 我尝试在命令前添加“exec”,但根本不会启动 exe:exec start /b .\ssf.exe
    • 如何在 shell 中运行它?蟒蛇版? windows还是linux?
    • 找到它:os.system("taskkill /f /im ssf.exe")
    【解决方案2】:

    我认为杀死进程是最简单的:

    os.system("taskkill /f /im ssf.exe")
    

    【讨论】:

      【解决方案3】:

      您没有在子进程中启动 ssf.exe。您启动了一个子进程,该子进程将在另一个进程中启动ssf.exe。当您运行 p.terminate() 时,您正在终止中间人,而不是 ssf.exe。

      【讨论】:

        猜你喜欢
        • 2013-10-27
        • 1970-01-01
        • 2013-11-12
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-28
        相关资源
        最近更新 更多