在网上找了一个Linux的监控程序,主要功能是,实现目标程序异常关闭后,自动重启。
监控程序如下:原作者可能是:http://blog.csdn.net/yiyaaixuexi/article/details/7068378
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
extern char **environ;
enum{
START = 0,
WAIT,
STOPPING,
};
int main(int argc, char **argv)
{
int status = 0, mode = START;
pid_t pid ;
while(1)
{
switch(mode)
{
case START:
pid = fork();
if(!pid){
execle("./myApp","",NULL , environ);
//execle("./myApp","./myApp","-qws",NULL,environ);
}
if(pid > 0)
mode = WAIT;
break;
case WAIT:
if(waitpid(pid, &status, 0) < 0)
{
mode = START;
break;
}
else if(WIFSIGNALED(status)||WIFSTOPPED(status)||WIFEXITED(status))
{
mode = START;
}else{
mode = WAIT;
}
break;
default:
break;
}
}
return 0;
}
编译之后,使用shell脚本运行,出现问题。说什么
can't fork
,网上找了找,但是没找到有帮助的东西。但是手动执行就没有问题。守护程序名是Guard,然后存放在sd卡上面,然后shell脚本就加一句/sdcarc/Guard。
手动执行的时候,Guard是在当前目录下面,而shell中是/sdcard/Guard,会不会是这个原因的,尝试修改shell如下:
cd /sdcard
./Guard &
Ok!!真的运行起来了,而且可以实现开机自启动了。