微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++-Windows-从任务管理器中捕获进程

如何解决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 举报,一经查实,本站将立刻删除。