Welcome 微信登录

首页 / 操作系统 / Linux / LinuxQt应用程序的守护精灵

需求点当我们希望应用程序被意外关闭、中止后,能够立即重新启动,就需要守护精灵来帮忙。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. }  
效果图