问题描述
当我们的程序被任务管理器杀死后,我需要停止服务。
我尝试使用std::signal(...)
和_onexit(...)
,但是它不起作用。
我尝试运行ProcessMonitor,因此检查了我可以捕获的某种信号,但是没有找到。
我尝试过:
auto serviceStopThread = QThread::create([](){
::WaitForSingleObject(::GetCurrentProcess(),INFINITE);
ServiceUtils::stopService();
});
serviceStopThread->start();
但它什么也没做。
我该怎么办?
解决方法
当进程仍然存在时,找到PID,然后用OpenProcess打开它。您至少需要SYNCHRONIZE
权限。
然后等待手柄发出信号。例如,您可以启动一个新线程,并在WaitForSingleObject
超时的情况下调用INFINITE
。无论原因为何,只要退出该过程,该句柄就会发出信号。
根据需要进行反应,但不要忘记在完成后打电话给CloseHandle
。
如果您只想在进程突然终止时做出反应,请在程序正常退出时向监督进程发送一些消息,以禁用处理。