Windows GUI 红十字和 taskkill 命令之间的区别(需要正确的进程退出)

Windows GUI 红十字和 taskkill 命令之间的区别(需要正确的进程退出)

我使用以下 Python 代码在命令行中启动了 VLC(带有 NDI 插件):

vlc = sp.Popen(["vlc", "-", "--aout", "NDI", "--vout", "NDI", url], shell=True)

(NDI是一种视频流网络技术)

要停止该过程我使用:

sp.Popen(["taskkill", "/F", "/PID", vlc.pid, "/T"], shell=True)

我还有 NDI 网络观察器(内置于 Touchdesigner),它可以检查可用的 NDI 源。

问题是:当我使用这个 Windowstaskkill 命令终止 VLC 进程,我的观察者不会更新 NDI 源列表。如果我只需按下红十字在打开的 VLC 窗口中,VLC 关闭并且源列表正在正确更新。

那么,当我按下这个红叉时会发生什么?这个动作和“ing”有什么区别taskkill

我想要实现的是能够使用命令行模拟这种红十字行为来更新我的 NDI 源列表。

答案1

红色X和几乎没有区别taskkill

有很大的不同在红色 X 和 之间taskkill /f。请注意/f

  • 窗口的“关闭”按钮将 WM_SYSCOMMNAND(SC_CLOSE) 消息发送到程序的消息循环,默认情况下,该消息循环会向其自身生成 WM_CLOSE 消息 - 询问关闭该特定窗口。

  • 常规taskkill只是直接向程序的消息循环发送 WM_CLOSE 消息,询问关闭所有窗口并退出。

  • “强制”taskkill /f调用 TerminateProcess(),类似于杀死-9在 Linux 上 – 它是无条件的,并且目标进程无法以任何方式拦截或延迟它。

答案2

那么,当我按下这个红叉时会发生什么?

这完全取决于应用程序。大多数传统桌面应用程序,点击关闭按钮将触发关闭事件,此事件通常用于执行关闭应用程序时适用的操作(提示保存文档等)。 这个事件的具体名称完全取决于编写应用程序的编程语言。

这个动作和taskkill有什么区别?

该进程立即关闭。 如果您在某个进程上“结束任务”,则该进程会立即关闭,您可以通过打开 Word 文档来确认此行为,Word 会在没有保存提示的情况下关闭。同样,如果您关闭 Word,它会提示您保存文档。通过强制结束进程,taskkill /f您将跳过该事件,进程会立即结束,因此 VLC 关闭时通常会发生的任何事情都不会发生。我的 Word 示例会做同样的事情taskkill /f,结束进程只是一个更容易进行的实验。

我想要实现的是能够使用命令行模拟这种红十字行为来更新我的 NDI 源列表。

我将不再强制关闭任务。

相关内容