Go的优雅退出

Go优雅退出/停机以前主要通过signal来实现,当然现在也是通过signal来实现,只是从go 1.16开始,新增了更加友好的API:

func NotifyContext(parent context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc)

 该函数该如何使用?

package mainimport ("context""fmt""os""os/signal""time"
)func main() {// 在这里执行异步的其他代码go async()ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)<-ctx.Done()  // 该语句done () 在接收到os.Interrupt时会停止阻塞强制return到下面fmt.Println("当前接收到了 os.Interrupt 指令,但是通过了Stop () 来 Reset")// 收尾中...stop() // 重置 os.Interrupt 信号,允许通过 Ctrl+C 强制退出// 执行收尾操作time.Sleep(3 * time.Second)fmt.Print("收尾成功,程序退出。")
}func async() {for i := 0; i < 100; i++ {fmt.Println("我是协程")time.Sleep(1 * time.Second)}
}

如果使用stop,再次ctrl+c能直接强制退出,因为对应的signal通知已经被重置了:

如果不使用stop,则ctrl+c不能强制退出,假设收尾工作存在死锁等行为,则无法通过Ctrl+C杀掉进程,效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DevChat:开发者专属的基于IDE插件化编程协助工具

DevChat&#xff1a;开发者专属的基于IDE插件化编程协助工具 一、DevChat 的介绍1.1 DevChat 简介1.2 DevChat 优势 二、DevChat 在 VSCode 上的使用2.1 安装 DevChat2.2 注册 DevChat2.3 使用 DevChat 三、DevChat 的实战四、总结 一、DevChat 的介绍 在AI浪潮的席卷下&#x…

Linux每日智囊

每日分享三个Linux命令,悄悄培养读者的Linux技能。 ls 作用 显示目录信息 语法 ls [选项] 文件 参数: -a:显示所有文件,包含以 . 开头的隐藏文件以及特殊目录-A:显示所有文件,包含以 . 开头的隐藏文件,但不显示特殊文件 . 和 …-l:使用长格式显示当前目录下文件的详…

STM32——NVIC中断优先级管理分析

文章目录 前言一、中断如何响应&#xff1f;NVIC如何分配优先级&#xff1f;二、NVIC中断优先级管理详解三、问题汇总 前言 个人认为本篇文章是我作总结的最好的一篇&#xff0c;用自己的话总结出来清晰易懂&#xff0c;给小白看也能一眼明了&#xff0c;这就是写博客的意义吧…

家庭安全计划 挑战赛| 溺水预防

溺水预防 从了解到行动 家庭安全计划 | 少年急救官 地震避险逃生该怎么做&#xff1f; 起火了该如何应对&#xff1f; 哪些行为容易导致溺水&#xff1f; 家庭风险隐患有哪些&#xff1f; 家庭逃生演练四步骤你会吗&#xff1f; 国际救助儿童会&#xff08;英国&#xff…

3d max软件中的缓存垃圾该如何清理?

使用3d max建模到渲染操作&#xff0c;来回对效果图调整的次数过多时&#xff0c;就会出现一下看不到的垃圾缓存&#xff0c;影响保存的速度&#xff0c;影响效率&#xff01; 对于这类的3d垃圾清理的有什么高效方法呢&#xff1f; 3dmax垃圾清理的常规操作如下&#xff1a; 1、…

Pytest插件

官方文档&#xff1a;API Reference — pytest documentation BaseReport 定义Case结果输出 >>> from _pytest.reports import TestReport >>> test TestReport(1,1,1,pass,,running) >>> print(dir(test)) [__annotations__, __class__, __delatt…

爬虫常见风控

一.ip风控 单位时间内接口访问频率。 二.设备指纹风控 设备注册时候设备特征是否完整&#xff0c;信息主要包含硬件、网络、系统三部分。 硬件属性&#xff1a;设备品牌、型号、IMEI&#xff08;国际移动设备识别码&#xff09;、处理器、内存、分辨率、亮度、摄像头、电池、…

深入了解RAID 0、RAID 1、RAID 10和RAID 01:性能、可靠性与成本的抉择

RAID 0、RAID 1、RAID 10、RAID 01&#xff1a;区别、优缺点详解 引言RAID 0 优点&#xff1a;缺点&#xff1a; RAID 1 优点&#xff1a;缺点&#xff1a; RAID 10 优点&#xff1a;缺点&#xff1a; RAID 01 优点&#xff1a;缺点&#xff1a; 总结 RAID 0、RAID 1、RAID 1…

【03】Istio Gateway示例配置

3.1 开放kiali至集群外部 首先将istio-inressateway暴露集群外部; 在node02的ens33网卡上面有多余的ip地址&#xff0c;将该地址绑定在igressgateway的svc 上面。 kubectl edit svc istio-ingressgateway -n istio-system定义kiali的ingress gateway的资源配置清单 apiVersion:…

【广州华锐互动】楼宇智能化VR虚拟教学系统

在如今的技术时代&#xff0c;教育行业正在逐步引入各种创新方法以提升教学质量。VR公司广州华锐互动开发的楼宇智能化VR虚拟教学系统就是其中的一种&#xff0c;它利用虚拟现实(VR)技术&#xff0c;为学生提供一种全新的、沉浸式的学习体验。 楼宇智能化VR虚拟教学系统涵盖综合…

深入浅出 Django 异步编程

随着 Web 应用对性能的要求日益提高&#xff0c;异步编程成为了提升响应速度、提高系统吞吐量的重要手段。Django 作为一个成熟的 Python Web 框架&#xff0c;自 3.1 版本开始支持了异步编程。在本文中&#xff0c;我们将探讨 Django 异步编程的关键概念&#xff0c;并提供实际…

【Spring Boot 源码学习】初识 SpringApplication

Spring Boot 源码学习系列 初识 SpringApplication 引言往期内容主要内容1. Spring Boot 应用程序的启动2. SpringApplication 的实例化2.1 构造方法参数2.2 Web 应用类型推断2.3 加载 BootstrapRegistryInitializer2.4 加载 ApplicationContextInitializer2.5 加载 Applicatio…

Word转PDF简单示例,分别在windows和centos中完成转换

概述 本篇博客以简单的示例代码分别在Windows和Linux环境下完成Word转PDF的文档转换。 文章提供SpringBoot Vue3的示例代码。 文章为什么要分为Windows和Linux环境&#xff1f; 因为在如下提供的Windows后端示例代码中使用documents4j库做转换&#xff0c;此库需要调用命令行…

python的re正则表达式

华子目录 什么是正则表达式元字符字符集字符集与元字符的综合使用 数量规则指定匹配次数边界处理分组匹配贪婪匹配非贪婪匹配re.S转义字符re.search()re.sub()实例常见的匹配模式 什么是正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串…

macOS Big Sur(macos11版本)

macOS Big Sur是苹果推出的最新操作系统&#xff0c;具有以下特点&#xff1a; 全新的设计风格&#xff1a;Big Sur采用了全新的设计语言&#xff0c;包括更加圆润的窗口和控件、更加鲜明的色彩和更加简洁的界面。这种设计风格使得操作系统更加美观和易用。强大的性能表现&…

基于RK3399的室内健身魔镜方案

I 方案背景 一、健身魔镜的兴起 2020年疫情席卷全球&#xff0c;宅家是防疫的措施之一&#xff0c;因而宅家运动火爆&#xff0c;随之而来的宅家运动器材也风靡起来&#xff0c;其中包含既有颜值又具有多种功能的健身魔镜。 Ⅱ 方案介绍 一、健身魔镜的方案介绍 …

Mysql数据备份 — mysqldump

一 备份类型 - 逻辑备份&#xff08;mysqldump&#xff09;&#xff1a; - 优点&#xff1a; - 恢复简单&#xff0c;可以使用管道将他们输入到mysql。 - 与存储引擎无关&#xff0c;因为是从MySQL服务器中提取数据而生成的&#xff0c;所以消除了底层数据…

windows安装nginx

一、下载安装Nginx 1、官网下载地址&#xff1a;nginx: download 2、下载教程&#xff1a;选择最新的Stable version&#xff08;稳定版本&#xff09;下载到本地 3、下载完成后&#xff0c;解压放入本地非中文的文件夹中&#xff1a; 4、启动nginx&#xff1a;切勿直接双击n…

如何做一个能用的 JAVA 的 Websocket 聊天室?

要实现一个能用的 JAVA Websocket 聊天室&#xff0c;可以按照以下步骤进行&#xff1a; 选择合适的 Websocket 库&#xff1a;Java 有多种 Websocket 库可供选择&#xff0c;例如 Tyrus、Jetty、Netty 等。根据自己的需求和熟悉度选择一个合适的库。编写聊天室服务器代码&…

Ubuntu搭建AI画图工具stable diffusion-webui

Ubuntu搭建 安装依赖项 安装以下依赖项&#xff1a; # Debian-based: sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0# Red Hat-based: sudo dnf install wget git python3# Arch-based: sudo pacman -S wget git python3下载并安装WebUI 进入您想要安…