在windows下创建守护进程A和B ,在其中一个挂掉以后,另一个会把挂掉的拉起来。
下面展示一些 内联代码片
。
这里只列出了A的代码,B和A类似。
#include<iostream>
#include<Windows.h>
#include<tchar.h>
#include <tlhelp32.h>//声明快照函数的头文件
bool IsProcessRun(const WCHAR * pName) //查看进程是否运行
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
bool bFind = false;
// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
return false;
}
// Set the size of the structure before using it.
pe32.dwSize = sizeof(PROCESSENTRY32);
// Retrieve information about the first process,
// and exit if unsuccessful
if (!Process32First(hProcessSnap, &pe32))
{
CloseHandle(hProcessSnap); // clean the snapshot object
return false;
}
// Now walk the snapshot of processes, and
// display information about each process in turn
do
{
// Retrieve the priority class.
dwPriorityClass = 0;
if (::wcsstr(pe32.szExeFile, pName) != NULL)
{
bFind = true;
break;
}
} while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return bFind;
}
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi; //进程信息:
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
DWORD dwExitCode;
TCHAR szCommandLine[] = L"cmd /c D://c++//vs2019//test3//Debug//test3.exe";
//Spawn the child process.
while (1)
{
if (IsProcessRun(L"test3.exe"))
{
Sleep(1000);
printf("test3 正在运行\n");
}
else
{
printf("test3 未运行\n");
BOOL fSuccess = CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE,CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
//CREATE_NEW_CONSOLE 新进程拥有新的终端
if (!fSuccess)
{
std::cout << "子进程创建失败" << std::endl;
system("pause");
return 0;
}
std::cout << "子进程信息1" << std::endl;
std::cout << "子进程id: " << pi.dwProcessId << std::endl;
std::cout << "子线程id: " << pi.dwThreadId << std::endl;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}
std::cout << "子进程结束" << std::endl;
system("pause");
return 0;
}
感谢大家观看 同时如果发现问题 希望指出 大家一起进步