进程防杀——双进程守护

编程入门 行业动态 更新时间:2024-10-05 01:13:23

<a href=https://www.elefans.com/category/jswz/34/1771450.html style=进程防杀——双进程守护"/>

进程防杀——双进程守护

进程A为主进程,进程B为守护进程,例如:通过一个事件event,判断进程A是否存在,若存在,无动作,若不存在,则启动进程A; B—>启动临时进程—>启动进程A;临时进程的作用是防止通过 进程树把两个进程同时杀死。
双进程守护的思想: 假设我想保护A进程,不想被别人结束掉。比如通过进程管理器等方式。 那么就建立一个后台监视进程B,判断A进程是否还存在,如果被杀死,那就重新建立一个A进程。 当然,你也许会说,我可以把B先结束掉,在杀死A。所以A进程也需要监视B进程,发现B被杀死,就创建一个B。
所以双进程守护的两个关键就出现了, (1)进程持续运行(因为需要监视,所以,要一直运行。) (2)如何实现进程间的相互监视! 第一点比较容易实现,只要创建一个死循环就好,注意循环中加入sleep(n)很重要,减少资源占用。 第二点比较麻烦,一个进程被杀死,另一个进程必须马上直到他被杀,然后才可以启动它。其实就是进程间的通信,这个有好多方法实现。 我们采用创建事件event的方式来达到目的。 A进程启动的时候CreateEvent(NULL, NULL, FALSE, TEXT("EVENT1")); B进程启动的时候CreateEvent(NULL, NULL, FALSE, TEXT("EVENT2")); 在A进程中的死循环(while(true))中,加入检测代码 while (true)  {   hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("EVENT2"));   if (!hEvent)     {    CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE, NULL, NULL, NULL, &si1, &pi1);//创建进程Test2.exe
   WaitForSingleObject(pi1.hProcess, INFINITE);    CloseHandle(pi1.hProcess);    CloseHandle(pi1.hThread);   }   else   {    CloseHandle(hEvent);   }   Sleep(100);  }
进程B创建了EVENT2,在进程A中调 用 OpenEvent,若打开成功,返回句柄,则证明进程B存在,因为进程B被杀死后,EVENT2会被删除,导致open失败。
进程B中也加入相似代码,以此达到双进程守护的目的。
但是一般这个方式可以通过结束进程树的方式结束程序,可能因为是父子进程的关系。 所以我们创建临时进程,使这两个进程脱离父子进程的关系。 如A创建temA,temA创建B,然后temA任务完成,自动结束。 B创建A时同理。
代码下载:

更多推荐

进程防杀——双进程守护

本文发布于:2024-02-28 07:39:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768712.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进程

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!