Linux Qt应用程序的守护精灵
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);
参考代码
- #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;
- }
效果图
评论暂时关闭