簡體   English   中英

殺死一個不返回的 python 子進程

[英]Kill a python subprocess that does not return

TLDR 我想在它仍在運行時殺死一個像 top 這樣的子進程
我正在使用 Fastapi 在輸入上運行命令。 例如,如果我輸入 top 我的程序運行命令,但由於它沒有返回,此時我必須使用時間延遲然后殺死/終止它。 但是我希望能夠在它仍在運行時將其殺死。 但是目前它不會運行我的 kill 命令,直到時間用完。 這是運行進程的當前代碼:

@app.put("/command/{command}")
async def run_command(command: str):
    subprocess.run([command], shell=True, timeout=10)
    return {"run command"}

並殺死它

@app.get("/stop")
async def stop():
    proc.kill()
    return{"Stop"}

我是 fastapi 的新手,所以我將不勝感激

這是因為subprocess.run本身阻塞 - 您需要在后台運行 shell 命令,例如使用Popen

from subprocess import Popen

process = None
@app.get("/command/{command}")
async def run_command(command: str):
    global process
    process = Popen([command])  # something long running

    return {"run command"}


@app.get("/stop")
async def stop():
    process.kill()
    return {"Stop"}

但請注意一件事,如果命令包含空格 Popen 應該獲取部件列表,因此運行命令“sleep 10”應該是Popen(["sleep", "10"])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM