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

时间:2018-07-23 10:09:46

标签: c++ windows winapi signals d

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

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

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

谢谢!

编辑:正如评论中所讨论的那样,我已经标记了C ++和D,因为用任何一种语言回答都很有帮助。两种语言是交叉兼容的,彼此之间非常容易移植。

1 个答案:

答案 0 :(得分:3)

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

如果引起损坏不是您的目标,则可以通过GenerateConsoleCtrlEvent关闭控制台应用程序,并且可以通过发布其窗口(或多个窗口)WM_CLOSE消息来关闭GUI应用程序。

某些应用程序通过显示提示用户保存文件的模式对话框来响应WM_CLOSE,因此,您可能需要在进程句柄上设置超时,并且如果花费太长的时间就直接调用TerminateProcess。


如上所述,除非您的应用程序参与了实际启动控制台应用程序,否则您将无法真正满足调用GenerateConsoleCtrlEvent的要求,这是不幸的。即使附加到可以处理WM_CLOSE事件的控制台窗口,除非这是发送ctrl事件的秘密方法,否则控制台应用程序本身也将无法响应WM_CLOSE消息以进行正确清理,因此您只需要希望最好并使用TerminateProcess

文档: TerminateProcessGenerateConsoleCtrlEventWM_CLOSE

相关问题