关于应用程序的重启

重启原因总结 3,系统重启过程中我们需要对芯片做什么处理,不同情况下对芯片是否做相同的处理呢。(4)power reboot(电源重启(掉电重启))(3)watchdog reboot(看门狗重启)(1)cold reboot (冷重启)(2)warm reboot(暖重启)什么是热重启,什么是冷重启,有什么区别。(3)什么是看门狗重启。(4)什么是掉电重启。 阅读详情

在我们平时用电脑的过程中,最不想遇到的事情就是机器重启了,它造成的除了等待之外还有惊悚,毕竟我们谁也不想让磁盘在自检过程中失败。但是应用程序重新启动也不是什么好事,本文就简单谈谈应用程序的重新启动

     电脑重启有两种方式,一种是冷重启,另一种是热重启,这两种有何区别,其实冷重启是硬件的复位,而热重启硬件没有复位而只是指令的复位,实际上,在热重启 过程中,硬件并没有任何感知,只是作为软件的cpu 指令跳转到最最开始的位置,比如在x86 平台就是0x 7c 00 的位置,并且回归到实模式,仅此而已,硬 件电路该通则通,没有任何异常。但是冷重启就不一样了,冷重启是硬件的复位,举个例子就是当你按下重启键时,物理线路被切断,相关引脚的电平拉低,然后引 起一系列反应引起整个机器的复位,从而造成重启,可以看出这种重启是物理原因造成的,物理连线引起的,软件指令是被动执行重启行为的,不同于热重启,在热 重启中,软件指令是主动执行重启行为的。
     
实际上,任何可以顺序执行的物件都可以重新启动,这里的意义很简单,所谓重启必然有一个启动,只有启动的东西才可以重新启动,而启动意味着开始,大家都知 道冯氏的指令都是顺序执行的,所以不光是机器,所有冯氏机器里面的执行绪都可以被重启,当然也都有冷重启和热重启两种方式。本质上讲,整台冯氏机器就是一 个执行绪,可以叫做机器进程(参见《操作系统》一书,老外写的),这个意义上机器进程和我们的应用程序进程没有区别,只不过应用程序进程的层次比机器进程 的层次更高。
     
我们看一下应用程序怎么重启,不知道大家有没有用过迅雷和eclipse ,当遇到一些问题的时候,会弹出一个对话框说程序要重启,然后我们点确定,原来的 进程退出,新的进程起来了,这一切看似简单,仔细考虑一下就会发现并不容易实现,因为在旧进程退出和新进程启动的时间间隔里,这个进程实际上没有任何信息 在系统里面,除非有一个第三方进程一直在监视这个进程,当检测到该进程退出并且要求重启时,立马再重新启动一个相同的进程,如果没有这个第三方管理进程, 重启看来是很难实现的。可是真的就是很难实现吗?
    
我们回想一下冯氏机器的特点就会知道,只要让执行指令回到原点就可以了,这种重新启动就是热重启,那么怎么实现指令的回归呢?在linux 中,我们可以用 exec 来实现,exec 谁呢?当然是exec 自己了,比如当前在执行“test” ,那么就在test 内部的异常处理中要重启当前进程的地方调用 execX("test",...) 就可以了,这就是热重启,也就是软件指令主动的重启,一切大环境,大容器都没有变,只不过容器里面的东西变了而已,在 linux 中可以看出,在执行完exec 重启该进程后,进程的pid 并没有变化,包括信号的阻塞掩码也没有变化,你要想让之变化,那么你就必须手工设置, 在windows 中,好像没有什么办法可以实现上述的热重启操作,重启操作过后,一切都变了,不光人非,物也非了(linux 中可以做到物是人非)。
    
如果想实现冷重启,很简单,就是被动的执行就可以了,这就需要一个管理进程来操作重启行为了,比如该管理进程先杀死原始进程,等待一切干净以后,马上再启 动一个就是了,这里的管理进程相当于机器重启过程中的硬件的作用,是一个主动发号指令的实体。必须要明白的是,重启的种类有两种,如果容器不变只是内容变 化了,那么就是热重启,如果连容器都变了,那么就是冷重启,抛开冷热不谈,重启的本质是指令的重新执行,是一种指令的回归。理论扯完了,那么就看一下代码 吧,我这里有一个进程重启的代码,我们知道在linux 中进程指的不仅仅是可执行映像的动态行为,还可以是fork 后的执行绪,我这里给出的代码就是重新 启动fork 后的子进程的代码:

#include <signal.h>  

#include <unistd.h>  

void restart(int sig)  

{  

    waitpid(-1, NULL, 0);  

    if( 符合重启条件)  

        execl("./test", "test", NULL);  

}  

int main()  

{  

    sigset_t mask;    // 这个和以下3 行是为了解除屏蔽SIGCHLD 信号,因为在父进程收到SIGCHLD 信号后,就会阻塞屏蔽该信号,因此即使你exec 了自己,那么 SIGCHLD 还将存在于阻塞集合当中,必须去除之才可以持续接受SIGCHLD 信号  

    sigemptyset(&mask);  

        sigaddset(&mask,SIGCHLD);  

        sigprocmask(SIG_UNBLOCK,&mask,NULL);  

    signal(SIGCHLD, restart);  

    if(fork() == 0)  

    {  

*    ...// 做自己的事情,实现进程逻辑  

    }  

    ...// 无限等待  

}   

该代码被编译为test 可执行程序,当你执行的时候,* 会执行,当它遇到问题退出的时候,在restart 信号处理函数中会被重启,在遇到问题 fork 子进程退出的时候,发送SIGCHLD 信号给父亲,那么restart 处理函数就会被执行,进而重启。那么如何改造之后将上述代码实现为热启动 呢?很简单,就是将fork 去掉,将restart 作为信号处理函数提供改为作为异常处理函数提供,我们可以看到,在fork+ 信号处理实现的冷重启中, 进程的pid 发生了变化,而在直接exec 实现的热重启中,pid 没有发生变化,因此如果想持续根据pid 跟踪一个进程,那么最好在遇到问题的时候用热重 启,不幸的时,这在windows 下很难实现(也许是我还很嫩,还没有学会),在windows 下必然的造成了pid 的改变,即使你直接用exec (参见 前一篇文章)。当然你完全在上述代码的fork 子进程中执行exec ,效果一样。

     在热重启的时候要注意一定要做善后工作,也就是说一定要释放掉先前的资源,不光执行流要复位,资源也要复位,正如在 linux 执行 reboot 的时候,一 定要让各种硬件也复位一样,对于机器的热重启,资源就是各种硬件,对于进程,资源就是如文件描述符之类的东西。

 

Qt 之重启应用程序 阅读详情

相关推荐

Qt实现应用程序重启的方法

具体来说,我们使用QProcess::startDetached()函数来启动一个新的实例,该实例将使用相同的应用程序路径和命令行参数。这将导致原始应用程序实例退出,并启动一个新的实例。为了重新启动应用程序,我们可以使用QCoreApplication::arguments()函数获取当前应用程序的命令行参数,然后将它们传递给新的QProcess实例。通过使用QProcess类和QCoreApplication::arguments()函数,我们可以方便地传递命令行参数给新实例,并实现应用程序的重启功能。

PixelLogic的博客 1458

服务器冷重启和热重启

冷启动 Cold Reset, cold reboot, cold boot, hard reboot,关闭电源,再打开电源重启计算机。 热启动 Warm Reset, warm boot, soft reboot, 在不关闭电源的情况,由软件控制重启计算机。 主要区别 热启动没有关闭电源;启动过程的区别是,冷启动需要进行硬件的自检,而热启动跳过硬件自检这一步。 冷启动(在直接关闭电源...

owlcity123的博客 2万+

linux net socket 编程示例

LINUX SOCKET编程通信小例子,入门级。试过可以运行。

开机冷启动和热启动简单分析

同样的,对于笔记本、台式机、服务器来说,冷启动是电源从未开启到开启的一个启动过程;而热启动则是计算机在DOS状态下运行时,左手按住“Ctrl”和“Alt”不放开,右手按下“Del”,然后同时放开,计算机会重新启动,这种启动方式是在不断电状态下进行计算机的程序启动,所以也叫做热启动(不知道现在ctrl alt delete里头的注销是不是热启动)。对于应用来说,启动王者时,后台没有王者的进程,这就叫冷启动;(PS:以前电脑有reset键,可以直接热启动,但是因为热启动多了对电脑不友好,于是好像就删了)

qq_46695411的博客 1317

Unity PBR实战:从零打造丝绸材质各向异性高光效果

本文详细介绍了在Unity中实现丝绸材质各向异性高光效果的PBR实战技巧。通过改造Standard Shader、适配IBL环境光以及高级效果调优,开发者可以创建出逼真的丝绸材质,展现动态光纹变化。文章包含关键代码示例和参数配置建议,特别适合需要提升材质表现力的Unity开发者。

weixin_29015483的博客 459

秋叶ComfyUI-v10中文整合包:全中文AI绘画一键部署与实战指南

Stable Diffusion作为当前主流的扩散模型,通过去噪过程从随机噪声生成高质量图像,其开源特性推动了AI绘画技术的普及。然而,其官方WebUI在自定义工作流和可复现性上存在局限,而基于节点流程的ComfyUI则提供了更高的自由度和工程化控制能力,尤其适合复杂、可重复的创作流程。对于中文用户而言,英文界面和提示词输入是主要障碍。秋叶出品的ComfyUI-v10中文整合包,正是针对这一痛点,提供了**全中文界面**和**原生中文提示词支持**的解决方案。该整合包将Python环境、依赖库及常用插件预配

weixin_33895475的博客 399

计算机的启动方式(冷启动、热启动、复位启动)、注销、待机

一:计算机的启动方式  ①冷启动,指计算机在没有加电的状态下初始加电,一般原则是,先开外设电源,后开主机电源,因为主机的运行需要非常稳定的电源,为了防止外设启动引起电源波动影响主机运行,应该先把外设电源接通,同时应避免主机启动后,在同一电源线上再启动其他电器设备,如:电视,冰箱,空调等家电设备。  而关机时正好相反,应该在关闭计算机程序后,先关主机后关外设,这样可以防止外设电源断开一瞬间产生的

杀破狼961 1万+

保姆级教程:用sw_urdf_exporter插件将Solidworks机械臂模型转为ROS可用的URDF

本文提供了一份详细的保姆级教程,指导用户使用sw_urdf_exporter插件将Solidworks机械臂模型转换为ROS可用的URDF文件。从环境准备、插件配置到模型预处理和关键参数设置,再到ROS环境集成测试和性能优化,全面覆盖了机械臂URDF转换的全流程。特别适合机器人工程师和ROS开发者快速实现Solidworks模型到ROS环境的无缝迁移。

weixin_29300931的博客 399

【Androidstudio】学习/采坑笔记-冷重启和热重启(reboot)

摘要:本文总结了Android开发中调用无障碍模式启动雷达控制服务时遇到的三个问题及解决方案。重点分析了release模式下权限保存异常的问题,发现冷重启会导致权限数据丢失,而热重启(使用svc power reboot命令)能确保权限正常保存。通过AI分析指出,热重启会触发完整的Android关机流程,执行厂商定制逻辑,保证硬件驱动正常初始化。建议在代码中同时加入空指针检查以提高健壮性,并将测试脚本中的重启命令替换为热重启命令以模拟真实用户行为。

pure81的博客 899

ESP32开发板使用Arduino实现变成蓝牙鼠标教程

通过这个教程,你可以轻松将ESP32开发板变成蓝牙鼠标。如果你在使用过程中遇到任何问题,或者库没有正常工作,不妨下载我上传的修复版本,再试试看。希望你们能根据这个基础做出更多有趣的蓝牙控制项目!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 967

学Simulink--基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模示例

本文详细介绍了基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模方法。首先分析了UKF相比EKF在强非线性场景下的优势,包括无线性化误差、计算效率高和鲁棒性强等特点。接着阐述了UKF的核心原理,重点讲解了无迹变换(UT)的三个关键步骤:Sigma点生成、非线性传播和加权统计重构。文章还详细说明了二维机动目标的状态向量定义、非线性状态转移模型和雷达观测模型。 在Simulink实现部分,提供了完整的建模步骤和核心代码,包括目标运动模型、雷达传感器模型和UKF算法模块的实现。通过蛇形机动场景的仿真实

xiaoheshang_123的博客 89

qt 重启应用程序

qt 重启应用程序

xie__jin__cheng的博客 839

MDF和DHF、DMR、DHR三者差异?注册与备案文件?医疗器械产品技术要求编写指导原则

定义:设计历史文档(DHF ) 指的是描述某医疗器械成品设计过程的有关记录。内容:DHF包括设计开发活动的所有记录。从最初的策划、客户需求、设计输入,设计输出、设计验证、设计确认、所有的设计评审,设计转换,以及设计变更相关的所有记录。均属于DHF的一部分。要求:各制造商应为每个类型的器械建立并保持设计历史文件。设计历史文件应包含或引用必要的记录,以证实设计符合经批准的设计计划和法规的要求。

学海无涯的专栏 9110

QT 应用程序重启

QT 应用程序重启方案

weixin_41843457的博客 416

本地玩转AI还得靠这个,SillyTavern(酒馆)到底有多强?

SillyTavern是一款本地运行的LLM交互前端,支持文本生成、图像生成、语音合成等功能。它最初是TavernAI的分支,现已独立开发,社区活跃,功能更新频繁。SillyTavern通过前端UI和插件系统连接各种大模型后端,如OpenAI、KoboldAI等,用户可以在本地创建“虚拟酒馆”与各种角色对话。其功能亮点包括角色卡、角色记忆、世界设定、多人聊天室、自定义UI和行为脚本、插件扩展支持等。SillyTavern适合AI创作用户、AI工程师、LLM爱好者和AIGC创作者。它有两个维护分支:relea

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 8033

YOLOv11改进策略【卷积层】| TIP 2025 MFA 多阶段特征聚合 大核扩感受 + 多梯度融合,强效增强弱小目标特征

红外弱小目标尺寸极小、信噪比低,在特征传递中极易丢失信息;常规卷积感受野单一、梯度源不足,难以同时捕捉局部细节与全局上下文,导致小目标特征表达弱、检测漏检。因此提出多阶段特征聚合 MFA,用大核卷积+多分支+通道注意力强化小目标特征提取。

Limiiiing的博客 584

C#实现重启应用程序

<br /><br />今天在工作中碰到需要重启在运行中的应用程序,现在写出来跟大家分享:<br />using System.Diagnostics;   <br />    <br />   string strAppFileName=Process.GetCurrentProcess().MainModule.FileName;   <br />   Process myNewProcess=new Process();   <br />   myNewProcess.StartInfo.FileNa

xfantasy的专栏 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# Winform应用程序重启

winform应用程序重启

yizhou2010的专栏 3709

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

重启电脑的应用程序

这主要是双击应用程序重启电脑。private void Form1_Load(object sender, System.EventArgs e)  {   System.Diagnostics.Process.Start("shutdown.exe","-r -t 0");   }System.Diagnostics.Process.Start的用法System.Diag

nply2008的专栏 1156

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

避免重启你的应用程序

在开发测试阶段,某个功能模块出错或者功能需求改变,这时候程序员通常会修改源代码,然后重新编译,停止应用程序,重起应用程序。然后检测修改得功能是否正确,是否满足需求。很好,这一切在开发测试阶段都没有问题,无可厚非。不过到了应用正式上线就出现麻烦了。重启应用会导致系统不可用,或者导致用户请求、响应丢失。甚至有的系统本生就要求为系统动态添加功能,在没有为你的应用添加防止重启动的策略前,通常能做的是到凌晨

Stone的专栏 2803

java重启,如何使您的Java应用程序自行重启

I want to implement reset feature in my application which cleans up some directories, copies files etc. then in order to complete the process I need to restart it.How to make application reruns itself...

weixin_39631767的博客 321

重启应用程序池和重启网站

重启应用程序池: https://yq.aliyun.com/articles/384299 重启网站: ///cmd 为Start 或者 Stop 或者 Restart(没有尝试) public bool WebServerCmd(string cmd, string appName) { try { if (string.IsNullOrEmpty(appName))

Cathedra的博客 1329

C#应用程序重启实现

C#程序重启

追赶时代的博客 731

【Qt】Qt之重启应用程序【转】

简介 今天分享的内容有些意思-如何重启一个应用程序。其实,有时候这是一个很重要的功能点,而且很人性化、易用性很好。 例如:切换用户。当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重要性了。 简介 效果 qApp退出代码重启 定义退出代码 重启操作 修改应用程序循环 QProcess重启 源码下载 效果 qApp退出

技术分享,共同成长 574
上一篇: exec的不同实现--鸠占鹊巢还是功成身退
下一篇: 至今不敢写一篇关于cfs的文章
linuxcode_turing
博客等级 码龄17年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值