在Windows上正常终止命令行应用程序

Hon*_*rek 5 windows process taskkill

我正在创建一个命令行应用程序,它产生一个进程(由用户定义的命令,通常是一个HTTP服务器),当应用程序的工作完成时,我想让进程知道它应该终止.

在UNIX中,我可以通过发送SIGTERM来做到这一点,如果进程没有结束,那么我可以通过SIGKILL残酷杀死它.

在Windows中,我很难找到SIGTERM场景的替代方案.我学到了taskkill /PID XXXX(没有/f!),但是

  1. 我没有找到关于taskkill /PID XXXX幕后内容的信息,因此我无法测试它.我找不到如何处理taskkill /PID XXXX进程端的任何发送.
  2. 它似乎不适用于命令cmd.exe.我尝试在一个中运行一个简单的服务器进程cmd.exe,获取其PID并在另一个窗口中运行taskkill /PID XXXX它,但taskkill拒绝这样做:ERROR: The process with PID XXXX could not be terminated. Reason: This process can only be terminated forcefully (with /F option).

所以我的问题是:如何通知Windows中的命令行进程它应该终止而不强行终止它?如何在待终止进程方面接收和处理此类消息?

Adr*_*thy 4

GenerateConsoleCtrlEvent向控制台应用程序发出信号,就像用户按下了 Ctrl+C 或 Ctrl+Break 一样。控制台应用程序可以忽略这些信号(使用SetContolCtrlHandler),但是默认情况下,它们只是对自己执行 ExitProcess 。

这与用户关闭控制台窗口、注销或关机时 Windows 使用的信号相同。