C++实现双进程守护
#include "pch.h"#include <iostream>#include <Windows.h>//线程同步:消息、事件、临界区(不是内核对象)、互斥体//创建互斥体对象,守护程序利用OpenMutex()函数检测对方的互斥体对象是否存在,不存在则创建进程//线程回调函数//参数:程序名称DWORD WINAPI ThreadCheckProc(LPVOID lParam) {STARTUPINFOA si = { sizeof(si) };PROCESS_INFORMATION pi = { 0 };HANDLE hMutex;while (true) {hMutex = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, (LPCSTR)lParam);if (!hMutex) { //unicode下,用W版会失败CreateProcessA((LPCSTR)lParam, NULL, NULL, NULL,FALSE,CREATE_NEW_CONSOLE, NULL, NULL,&si, &pi);WaitForSingleObject(pi.hProcess, INFINITE);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}else {CloseHandle(hMutex);}Sleep(500);}}int main(){DWORD Tid;//创建自己的互斥体对象CreateMutexA(NULL, TRUE, (LPCSTR)"p1.exe");//创建线程检测对方的互斥体CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"p2.exe", 0, &Tid);while (1) { Sleep(500); };return 0;}
#include "pch.h"#include <iostream>#include <Windows.h>/线程回调函数//参数:程序名称DWORD WINAPI ThreadCheckProc(LPVOID lParam) {STARTUPINFOA si = { sizeof(si) };PROCESS_INFORMATION pi = { 0 };HANDLE hMutex;while (true) {hMutex = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, (LPCSTR)lParam);if (!hMutex) { //unicode下,用W版会失败CreateProcessA((LPCSTR)lParam, NULL, NULL, NULL,FALSE,CREATE_NEW_CONSOLE, NULL, NULL,&si, &pi);WaitForSingleObject(pi.hProcess, INFINITE);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}else {CloseHandle(hMutex);}Sleep(500);}}int main(){DWORD Tid;//创建自己的互斥体对象CreateMutexA(NULL, TRUE, (LPCSTR)"p2.exe");//创建线程检测对方的互斥体CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"p1.exe", 0, &Tid);while (1) { Sleep(500); };return 0;}
编译环境:vs2017 unicode
修改生成的程序为p1.exe,p2.exe,并且p1.exe,p2.exe在同一路径下,可以实现简单的双进程守护。
挂起其中的一个进程,可以实现全部关闭。或者,迅速关闭p1.exe,p2.exe亦可。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。