如何通过子进程正确终止在后台运行的进程?

How to properly terminate a process that is running in the background via subprocess?

提问人:amin 提问时间:9/28/2023 更新时间:9/28/2023 访问量:34

问:

我有方法通过以下方式在后台运行 bash 脚本:subprocess.Popen()

def my_method():
        try:
            process = subprocess.Popen(["bash", "my_script.sh", "&" ],
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE,
                            )
        except Exception as e:
            print(f"Error running the script: {e}")
        return process

def caller():
        process = my_method()

现在,我希望该方法能够正确终止后台脚本。我尝试了几种解决方案,例如 和 .但是,它们都不起作用。我想知道这是最好的解决方案吗?callerprocess.kill()process.terminate()

python 子进程 终止

评论

0赞 Tim Roberts 9/28/2023
问题是你的.您启动的进程(返回于 )将立即结束。您的脚本在您无法访问的完全独立的进程中运行。因此,删除 . 已经在后台运行它。"&"process"&"Popen
0赞 amin 9/28/2023
但我需要该过程在后台运行。所以,问题是我正在尝试编写一个小代码,在后台启动本地服务器,确保服务器已启动并运行。向服务器发送一些请求。一旦完成,必须释放服务器的所有资源并终止它。现在,问题是我可以在后台启动服务器,但我无法正确终止它,以便它释放所有资源。
1赞 Tim Roberts 9/28/2023
也许你没有读过我写的地方,已经在后台运行它。这就是为什么您的代码可以在进程运行时继续运行的原因。Popen
0赞 amin 9/28/2023
哦对不起。我错过了。谢谢。

答: 暂无答案