歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux Qt應用程序的守護精靈

Linux Qt應用程序的守護精靈

日期:2017/3/1 10:47:13   编辑:Linux編程

需求點

當我們希望應用程序被意外關閉、中止後,能夠立即重新啟動,就需要守護精靈來幫忙。

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

效果圖

Copyright © Linux教程網 All Rights Reserved