Linux Qt应用程序的守护精灵


需求点

当我们希望应用程序被意外关闭、中止后,能够立即重新启动,就需要守护精灵来帮忙。

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);

参考代码

  1. #include <stdlib.h>   
  2. #include <string.h>   
  3. #include <unistd.h>   
  4.   
  5. extern char **environ;  
  6. enum{  
  7.     START = 0,  
  8.     WAIT,  
  9.     STOPPING,  
  10. };  
  11. int main(int argc, char **argv)  
  12. {  
  13.     int status = 0, mode = START;  
  14.     pid_t pid ;  
  15.   
  16.     while(1)  
  17.     {  
  18.         switch(mode)  
  19.         {  
  20.             case START:  
  21.                 pid = fork();  
  22.                 if(!pid){  
  23.                     execle("./myApp","",NULL , environ);  
  24.                     //execle("./myApp","./myApp","-qws",NULL,environ);   
  25.                 }  
  26.                 if(pid > 0)  
  27.                     mode = WAIT;  
  28.                 break;  
  29.             case WAIT:  
  30.                 if(waitpid(pid, &status, 0) < 0)  
  31.                 {  
  32.                     mode = START;  
  33.                     break;  
  34.                 }  
  35.                 else if(WIFSIGNALED(status)||WIFSTOPPED(status)||WIFEXITED(status))  
  36.                 {  
  37.                     mode = START;  
  38.                 }else{  
  39.                     mode = WAIT;  
  40.                 }  
  41.                 break;  
  42.             default:  
  43.                 break;  
  44.         }  
  45.     }  
  46.     return 0;  
  47. }  

效果图

Linux  Qt应用程序的守护精灵

相关内容