需求點
當我們希望應用程序被意外關閉、中止後,能夠立即重新啟動,就需要守護精靈來幫忙。
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;
- }
效果圖