日期:2014-05-16  浏览次数:20725 次

怎么做一个守护进程--linux下的嵌入式程序
大神给个思路,O(∩_∩)O谢谢

来检查一个程序是否在运行,如果不运行,就启动它;
1、如果出现错误,可以让程序重新启动;比如这个程序的某个线程占CPU过高,超过50%(一般线程占CPU小于10%);
2、出现错误,来记录错误信息;(因为有时候没有那么多时间来做长时间的测试;出现错误,也不知道到底哪个线程出现的错误)

谢谢!

------解决方案--------------------
1. 占用cpu过高的问题,在MontaVista Linux中有配置。可以指定进程在占用cpu达到某个规定的界限,比如5分钟之内持续超过50%, 会被内核强制终止

2. log记录一般借助于syslog

一般的做法是把药监视的进程作为你的子进程。利用SIGCHILD信号监视其是否在执行。
重新启动也不是一直蛮干,需要策略。


------解决方案--------------------
linux系统下存在两个信号量SIGXCPU、SIGXFSZ用于防止进程cpu或者IO操作的文件设置的,超过限制,内核会发送这两个信号到目标进程。这两个信号属于可捕捉的。有api可以设置这两个限制的值。不过用于这个来控制目标进程,意义不大。因为这两个信号第一目标进程可以捕捉,第二不能干太多的事情,最多也就是目标进程自己捕捉这个信号进行处理,外部无能为力。

所以综合你的说的,api与信号在这里意义不大。倒是可以用父进程fork出子进程,两个进程之间存在心跳,心跳消息里面带上守护进程需要知道的信息,由子进程去填充。