[英]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.