Windows 上的 terminate/kill 应用程序应该使用什么信号?

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

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

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

我将使用 D standard library documentation 中的 std.process.kill(Pid pid, int codeOrSignal),但我不知道我需要发送什么信号。

谢谢!

编辑:正如评论中所讨论的,我标记了 C++ 和 D,因为这两种语言的答案都有帮助。这两种语言是交叉兼容的,并且很容易相互移植。

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

如果导致损坏不是您的目标,那么您可以通过 GenerateConsoleCtrlEvent 关闭控制台应用程序,并且可以通过发布 window(或 windows)关闭 GUI 应用程序 WM_CLOSE 消息。

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


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

文档: TerminateProcess, GenerateConsoleCtrlEvent, WM_CLOSE