我应该使用什么信号来终止/终止Windows上的应用程序

What signals should I use to terminate/kill applications on Windows?

本文关键字:终止 Windows 应用程序 什么 信号 我应该      更新时间:2023-10-16

对于POSIX环境,这很容易。SIGTERMSIGINTSIGQUITSIGKILLSIGHUP

但我正在用D编写一个应用程序,它需要根据用户输入管理打开的应用程序,并发送用户请求的信号。我需要知道这些信号在Windows中的等价物,以及它们的值。最重要的是什么?我在这里找到了相关文档,但它不如POSIX文档全面。

我将使用D标准库文档中的std.process.kill(Pid pid, int codeOrSignal),但我不知道需要发送什么信号。

谢谢!

编辑:正如评论中所讨论的,我已经标记了C++和D,因为这两种语言的答案都很有用。这两种语言是交叉兼容的,并且很容易在彼此之间移植。

Windows没有信号。如果您确实想终止应用程序,请调用TerminateProcess。这可能会导致它损坏正在写入的任何文件。

如果导致损坏不是您的目标,那么您可以通过GenerateConsoleCtrlEvent关闭控制台应用程序,并且可以通过发布窗口WM_close消息来关闭GUI应用程序。

一些应用程序通过显示提示用户保存文件的模式对话框来响应WM_CLOSE,因此您可能需要在进程句柄上超时,如果超时时间过长,则只需调用TerminateProcess。


如前所述,除非您的应用程序参与实际启动控制台应用程序,否则您无法真正满足调用GenerateConsoleCtrlEvent的要求,这很不幸。即使连接到可以处理WM_CLOSE事件的控制台窗口,除非这是发送ctrl事件的秘密方式,否则控制台应用程序本身将无法响应WM_CLOSE消息来正确清理,所以你只需要抱着最好的希望,使用TerminateProcess

文件:CCD_ 11,CCD_ 12,WM_CLOSE