当前位置: 技术问答>linux和unix
Linux下如何防止进程被非法关闭?
来源: 互联网 发布时间:2015-09-02
本文导语: 在windows下我是把监控线程注入到系统进程,然后监控我的服务程序。 在linux下有什么方案吗?谢谢大家。 还有,我监控程序、服务程序都是控制台的,如何给监控程序指令让它关闭服务程序呢? |...
在windows下我是把监控线程注入到系统进程,然后监控我的服务程序。
在linux下有什么方案吗?谢谢大家。
还有,我监控程序、服务程序都是控制台的,如何给监控程序指令让它关闭服务程序呢?
在linux下有什么方案吗?谢谢大家。
还有,我监控程序、服务程序都是控制台的,如何给监控程序指令让它关闭服务程序呢?
|
想要关闭好像也只能让他关,不过可以重新开启,靠inetd就可以做到(FreeBSD里面就是inetd,而好像有些Linux下叫xinetd),加入xinetd以后由xinetd来监视这些进程,只要被kill掉了,马上xinetd就会重新创建一个
|
如果只是对付比如kill的命令,完全可以用系统信号捕捉的方式解决。对于kill - 9这种方式没有效果。这时应该引入监控进程,监控进程可以是一个检查进程锁的程序,在进程锁被释放的时候,就用系统命令启动被监控的程序,当然恢复数据等等的问题,那就要作者更细致的考虑了。
|
P.S.
其实SYSINIT也可以实现,只要将/etc/inittab中的ACTION描述为RESPAWN就可以了,不过这样的弊端就是不能反复太快,否则会挂起(这是为了防止login进程重启过与平凡)
其实SYSINIT也可以实现,只要将/etc/inittab中的ACTION描述为RESPAWN就可以了,不过这样的弊端就是不能反复太快,否则会挂起(这是为了防止login进程重启过与平凡)
|
有几中方式可以实现这种想法,实际上就是通信。管道,socket甚至用数据库或者文件锁都可以。我举个文件锁的例子:启动被监视进程,锁住一个锁文件,当另一个进程启动的时候也试图锁住这个文件,如果失败就退出,等待下一次尝试,这样不就可以实现永远有进程在运行了吗?
至于要退出的话,可以给个自定义的信号给这个进程或者给被监视进程一个socket通信包。
至于要退出的话,可以给个自定义的信号给这个进程或者给被监视进程一个socket通信包。
|
全部做成daemon就可以了……
|
up