歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. }  

效果圖

Copyright © Linux教程網 All Rights Reserved