加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:01:51 所属栏目:Windows 来源:网络整理
导读:我正在创建一个命令行应用程序,它产生一个进程(由用户定义的命令,通常是一个HTTP服务器),当应用程序的工作完成时,我想让进程知道它应该终止. 在UNIX中,我可以通过发送SIGTERM来做到这一点,如果进程没有结束,那么我可以通过SIGKILL残酷杀死它. 在Windows中,我
我正在创建一个命令行应用程序,它产生一个进程(由用户定义的命令,通常是一个HTTP服务器),当应用程序的工作完成时,我想让进程知道它应该终止.

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

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

>我没有找到关于taskkill / PID XXXX在幕后做什么的信息,因此我无法测试它.我找不到如何处理XXXX在进程端发送的任务/ PID.
>它似乎不适用于cmd.exe中的命令.我尝试在一个cmd.exe中运行一个简单的服务器进程,获取其PID并在另一个窗口中运行taskkill / PID XXXX,但taskkill拒绝这样做:错误:无法终止使用PID XXXX的进程.原因:此过程只能强制终止(使用/ F选项).

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

解决方法

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

这与Windows在用户关闭控制台窗口,注销或关闭时使用的信号相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读