正确关闭应用程序:TerminateProcess的替代方案

时间:2014-01-24 15:33:47

标签: c++ winapi process ipc termination

我遇到了 TerminateProcess()功能的问题。 该应用程序我正在编写一个JobScheduler应用程序,用于在特定时间安排和启动作业。 为此,我使用 CreateProcess()来执行我的JobLauncher。

JobLauncher进程然后启动一个控制台程序(使用createprocess),它有效地执行作业可执行文件,等待终止并监视持续时间,用户和内核时间等。

为了从JobScheduler中终止作业,我首先开始使用TerminateProcess(),但它不允许我正确关闭可执行文件。我的意思是我发现无法挂钩任何终止事件。

在找到比残酷的 TerminateProcess()更好的方法之前,我在调用程序中使用 GenerateConsoleCtrlEvent()编写了一个中间解决方案。

在启动目标作业可执行文件的作业应用程序中,我使用 SetConsoleCtrlHandler()安装了一个处理程序。 在处理程序中,我可以终止作业的过程并正确地通知我的第三方。 这是我现在找到的更好的解决方案。

  

有没有更好的方法来编程并正确关闭流程?   你这个解决方案是完全荒谬的吗?   我不是一个“系统级”专业开发人员......

Ž。

1 个答案:

答案 0 :(得分:0)

这是众所周知的Windows控制台问题,您可以找到一些解决方案here

我们使用名为“Kamikaze”的内部控制台实用程序。它按照here的描述工作,对我来说这是一个最佳解决方案,因为在Windows版本和Windows体系结构(x86,x64)之间移植没有问题。