对于自行实现的很多服务,很多人喜欢用一个专门的监控进程来监控自己的服务,为了防止监控进程也崩掉,甚至使用了经典的双进程监控。不说别的,光编写调试这个双进程就够我喝一壶的啦,对于我这样专门写bug的家伙来讲,更是一件揪心的差事。就算有一天,我不再写bug了,可以操作系统的关卡你又过不了了,难关重重。这些监控程序,不管是单进程还是双进程,其根本肯定是一个big loop,而且这个big loop中几乎都要有一个sleep,否则CPU飙升,却不见得能给真正的服务,净给了这个big loop,就算没有sleep,你的cpu核心超级多,也不在乎钱,你可以专门买一个cpu来运行你这个monitor的big loop,然而在这次检测和下次检测之间的微小空隙里面还是会有很多事情可以发生的。比如下列的双进程序列:

p1:while(true) {:t0             status=monitor(p2):t1             if(status == 0) {                         start(p2);              } }:t2 p2:while(true) {:t0’             status=monitor(p1):t1’             if(status == 0) {                         start(p1);             } }:t2’

最直接的,假设p1和p2同时运行在两个cpu上,且序列同步,在t0和t1之间,t0’和t1’之间,p1和p2都被干掉会发生什么;如果在同一个cpu上运行,事情更简单,t1和t2之间干掉p1,同时给p2发送sigkill,此时操作系统调度到p2,p2本该从t0开始运行,然而由于内核信号队列中存在sigkill,它直接就exit啦,之后谁来启动它们俩。操作系统调度是程序员和管理员控制不了的,它也根本没有导出给应用层更多的控制权,因此在单cpu情况下,你无法预料调度器会怎样调度你的monitor,因而就可以设计一个混沌的序列来不断尝试干掉你的双monitor,多cpu情况下,事情更糟糕,注定你要带着脚镣跳舞。

因此,双进程保护在逻辑上并不是很可取的,虽然大体上,对于一般的场合,大家都在用它。问题就出在不管是p1还是p2都是可以在任意时刻被干掉的,如果它们其中之一不会被干掉,事情就解决了。在linux中,init进程不能被干掉,因此可以让init来充当monitor,实际上它里面也有一个经典的big loop,可是人家因为有特权,所以多多的sleep一下也是无大碍的。事实上,很多的linux服务都使用了init进程作为了自己的monitor,你只需要编辑一下/etc/inittab就可以了,在这个inittab中,注意最后面的几行:

1:2345:respawn:/sbin/mingetty tty1

这个respawn的含义就是结束了再起来的意思,你只需要将后面再添加几行这样的信息即可,你的服务就可以被监控了。需要注意的是,这些行以:分割,第一个字段是一个唯一的id,往下顺延即可,具体的信息可以man inittab,定会一目了然,我就不翻译man手册了。

本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1270906

Linux进程防杀/防崩溃monitor的实现相关推荐

  1. linux 进程被杀日志,Linux查看日志和关闭、杀***进程命令

    1  -----Linux查看tomcat日志命令: cd    /:切换到根目录 ll:查看根目录下的文件 cd    /data/kafu/log:切换到日志目录 ll:查看日志目录下的文件 ta ...

  2. 首创!用户级权限进程防杀 C++

    用户级权限实现简单防杀 Guest权限下实现防杀!全网首创思路! 无意中翻出小学时候写的程序,应该是全网首创的无权限防杀手段,拿出来分享下.这个程序运行不需要任何权限,应该是为数不多的能抗住PChun ...

  3. 三两行代码实现进程防杀,免驱动,IceSword,WSysCheck等无效.

    其实这个已经是一个很老的技巧了,今天挖出来写到blog上.windows在强制结束进程的时候会先结束掉所有的线程,而结束线程调用的是:PspTerminateThreadByPointer,这个函数很 ...

  4. 智能化防杀未知电脑病毒探讨

    智能化防杀未知电脑病毒探讨 金州[est_vip] 2006.8.21 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-c ...

  5. 易语言如何封装免杀防误报大漠多线程api模块

    易语言大漠多线程模块的制作调用,以及常用API的封装,同时在WIN10及虚拟机测试,初步做了免查杀,免误报,还介绍了程序集模块和类模块的制作调用,提供511遇见后台绑定工具,窗口属性查看工具. 1.什 ...

  6. 电信在线防杀毒墙,到底是不是流氓软件

    这几个月在老家搞了个电信宽带,每次上线,都会出来一个电信的广告.本来以为是电信的拨号软件作祟,后来google了下,发现很多地方的电信也有同样的问题,看来问题并不是出在本机上,而是电信的线路上. DN ...

  7. linux下隐藏root进程,宝塔面板隐藏彩蛋 – btkill.py:Linux异常进程专杀

    无意中发现宝塔面板btkill.py这个文件,打开一开原来的是Linux异常进程专杀的文件,从来没注意过啊,大鸟看了下5.9版本和最新的6.9版本都有这个文件存在,难道是宝塔官方留给用户的彩蛋? 不管 ...

  8. linux 目录防篡改,一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法

    一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法 [技术领域] [0001]本发明涉及文件防护技术领域,特别涉及一种基于Linux虚拟文件系统的防篡改方法及系统. [背景技术] [0002] ...

  9. 典型的进程级数据防泄密

    安全角度的数据防泄密 文档透明加密.沙盒防泄密都同属于典型的进程级数据防泄密.文档透明加密:进程HOOK+透明加解密:沙盒防泄密:进程HOOK+沙盒隔离:从安全角度看,系统安全强度取决于其中的最短板. ...

最新文章

  1. 36.两个链表的第一个公共结点——剑指offer
  2. python aes padding_python笔记43-加解密AES/CBC/pkcs7padding
  3. Python 标准化 - 使用logging
  4. python app服务器_Python应用02 Python服务器进化
  5. html偷拍代码,一段植入木马的html代码
  6. java的数据类型如下所示
  7. C++中的指针与引用
  8. P4026-[SHOI2008]循环的债务【dp】
  9. 模拟退火求解TSP问题
  10. 多线程的那点儿事(之自旋锁)
  11. 解决gitlab限制上传大小文件的问题
  12. anaconda下载太慢怎么办_Windows10下anaconda成功运行Cython
  13. 矩阵论7,8,9作业
  14. CRON 定时任务 在线解析
  15. Android常用对话框大全——Dialog
  16. 版本控制选择SVN还是Git?
  17. 【C++ Builder 11】选择文件夹的三种方式
  18. 左手招新,右手裁员,2019开年就业形势扑朔迷离
  19. pos收银系统 php,POS收银系统
  20. OpenCV:Knn算法

热门文章

  1. 二级考试java模拟考试_2017年计算机二级考试Java模拟试题及答案
  2. 40动态数组:打印锯齿矩阵
  3. Mifare Ultra Light 非接触式IC卡发卡总结
  4. TextBox获得焦点——客户端JavaScript
  5. 计算机原理之程序是怎么运行的
  6. 栈中函数调用原理_详解
  7. 微型计算机kong控制技术,AT89C2051单片机在步进电机控制中的应用
  8. c++输入了后边不继续_医疗:连涨多日,后边还能加仓吗?直接说答案!
  9. 大锅菜机器人_炒菜机器人——烹饪界的一场革命
  10. java 回滚异常_Spring事务管理只对出现运行期异常进行回滚