如何解决C ++-Windows-从任务管理器中捕获进程
当我们的程序被任务管理器杀死后,我需要停止服务。
我尝试使用std::signal(...)
和_onexit(...)
,但是它不起作用。
我尝试运行ProcessMonitor,因此检查了我可以捕获的某种信号,但是没有找到。
我尝试过:
auto serviceStopThread = QThread::create([](){
::WaitForSingleObject(::GetCurrentProcess(),INFINITE);
ServiceUtils::stopService();
});
serviceStopThread->start();
但它什么也没做。
我该怎么办?
解决方法
当进程仍然存在时,找到PID,然后用OpenProcess打开它。您至少需要SYNCHRONIZE
权限。
然后等待手柄发出信号。例如,您可以启动一个新线程,并在WaitForSingleObject
超时的情况下调用INFINITE
。无论原因为何,只要退出该过程,该句柄就会发出信号。
根据需要进行反应,但不要忘记在完成后打电话给CloseHandle
。
如果您只想在进程突然终止时做出反应,请在程序正常退出时向监督进程发送一些消息,以禁用处理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。