程序自重启有很多应用的场景,比如程序升级,通过网络下载好升级包后,自行重启,又比如程序容错,意外或无法解决的问题导致程序内某个业务卡死等。
程序的重启很多时候通过守护进程的方式来实现,这里介绍一种直接通过系统内核命令把自己重启的实现。
while(1){
//遍历应用打开的系统文件句柄
for(int i=0;i<sysconf(_SC_OPEN_MAX);i++){
//过滤标准输入输出并关闭
if(i != STDIN_FILENO && i != STDOUT_FILENO && i != STDERR_FILENO)
close(i);
}
//程序启动命令
char *args[] = {(char*)"myprogram.exe",(char*)"config.json",0};
//调用系统内核
execv("/proc/self/exe",args);
exit(0);
}