网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C++实现双进程守护

#include "pch.h"
#include 
#include 

//线程同步:消息、事件、临界区(不是内核对象)、互斥体
//创建互斥体对象,守护程序利用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;
}

克什克腾ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

#include "pch.h"
#include 
#include 

/线程回调函数
//参数:程序名称
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亦可。


当前名称:C++实现双进程守护
分享链接:http://bjjierui.cn/article/gcigdp.html

其他资讯