当我们希望应用程序被意外关闭、中止后,能够立即重新启动,就需要守护精灵来帮忙。
P.S.:不是病毒不是病毒……
实现方案
1.先启动守护
2.在守护中加载启动Qt应用程序,例子中我的测试Qt应用程序名为:myApp 。
特别注意
1.在PC本地,启动Qt应用程序:
execle("./myApp","",NULL , environ);
2.而我在ARM板子上实验的时候,上述语句就不能正常执行,需要进一步将其完整化,与此同时,嵌入式Linux Qt没有X11的支持,需要qws:
execle("./myApp","./myApp","-qws",NULL,environ);
参考代码
#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; }