在mac上打开和终止进程

问题描述 投票:0回答:1

在macOS上使用terminate()调用时,打开的程序不会关闭。

我试图通过python打开一个外部文件,然后关闭它。除了在macOS上杀死进程(应用程序)之外,一切似乎都在工作。怎么杀了?

prog = subprocess.Popen(['open', FileName])
while True:
    if keyboard.is_pressed("q"):
         prog.terminate()
         break
python subprocess popen
1个回答
1
投票

不那么容易。

在mac中,open命令将挖掘系统以找到启动文件的应用程序,这意味着它将fork-exec另一个可执行文件作为新进程。完成后,open命令将终止,同时保持其他进程运行(在后台,作为孤立进程)。

因此,使用subprocess上下文,您将看到open的进程ID,但不会看到open启动的子进程的进程ID。此外,考虑open启动目录的情况,在Mac上它将作为Finder上的新窗口打开。然后,您没有创建新的进程ID!类似地,对于其他文件,如果在调用open之前调用的应用程序已经运行,并且它更喜欢在现有进程的新选项卡中打开新文件。

在您的情况下,如果您想要更好的控制,可能您需要找出正确的应用程序来打开您的文件,并直接启动它而不是依赖open

编辑:

这是开放的man page。您可以使用某些开关进行开放运行,直到子进程终止,依此类推。但是,我仍然不确定你是否可以通过杀死开放来杀死子进程(无论成功与否取决于很多因素)。您可能需要弄清楚子进程的进程ID并直接终止它们。

© www.soinside.com 2019 - 2024. All rights reserved.