从事嵌入式行业已经3年,说来惭愧,我目前除了电路系统设计,PCB设计,while(1)系统程序设计就基本上不会什么了。面对外面世界的巨大压力,我觉得提升自我已经是一件刻不容缓的事情,于是在上周开始,我决定要接触嵌入式linux。
前天在群里遇到位仁兄提到他有个程序总是莫名其妙地自动关闭,他希望有段程序能够检测那个程序并在其关闭后自动将其重启。
我想了想准备试一试,于是有了下面几句代码,写的不好,希望遇到大侠指点一二!
#include
#include
#include
#include
#include
#include
#include
int main()
{
FILE *tmp;
int log;
int tmp2,i_id;
char *idname,*command;
int times;
if((log = open("./log.txt",O_CREAT | O_TRUNC | O_WRONLY,0666)) < 0)//输出重定向没弄好
{
perror("Can't Open log.txt");
exit(1);
}
while(1)
{
system("ps -ef|awk '$8 == "gedit"{print $2,"a"}'> pid.txt");//将gedit换成想要检测的进程名如/usr/lib64/firefox/firefox
printf("over!
");
if((tmp = fopen("./pid.txt","r+"))== NULL)
{
perror("Open File Error:");
exit(1);
}
times = 0;
while(1)
{
i_id = 0;
tmp2 = fgetc(tmp);
while((tmp2 >= '0')&&(tmp2 <= '9'))
{
i_id *= 10;
i_id += tmp2 - '0';
tmp2 = fgetc(tmp);
}
if(i_id != 0)
{
times ++ ;
printf("program is running the PID is %d
",i_id);
}
if(tmp2 != EOF)
continue;
else
break;
}
if(times == 0)
{
printf("program is done
");
printf("now I am tring to restart it
");
system("gedit");//这里的gedit也需要换掉!
}
sleep(5);
}
exit(1);
}
运行结果如下图所示