在Mac上打开和终止进程

时间:2019-05-01 16:12:58

标签: python subprocess popen

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

我试图通过python打开一个外部文件,然后关闭它。除了在macOS上终止进程(应用程序)外,其他所有事情似乎都在起作用。如何杀死它?

prog = subprocess.Popen(['open', FileName])
while True:
    if keyboard.is_pressed("q"):
         prog.terminate()
         break

1 个答案:

答案 0 :(得分:0)

不太容易。

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

因此,使用subprocess上下文,您将看到open的进程ID,但看不到open启动的子进程的进程ID。此外,考虑open启动目录的情况,在Mac上它将在Finder中作为新窗口打开。这样就没有创建新的进程ID!对于其他文件,如果在调用open之前调用的应用程序已在运行,并且对其他文件也是如此,则它宁愿在现有进程的新 tabs 中打开新文件。

在您的情况下,如果想要更好的控制,可能需要找出合适的应用程序来打开文件,然后直接启动文件,而不是依靠open

修改

这是开放的man page。您可以使用一些开关使打开运行,直到子进程终止,依此类推。但是,我仍然不确定您可以通过杀死open来杀死子进程(是否成功取决于很多因素)。可能您需要找出子进程的进程ID并直接将其杀死。