如何优雅地退出程序
1.iota简介2.go generate命令简介3.golang uuid库介绍4.gRPC基本教程5.protolator简介6.Govulncheck v1.0.0 发布了!7.每日一库:GORM简介8.Go泛型简介9.Go 1.21发布!10.Golang zip压缩文件读写操作11.本地搭建playground12.zap自定义日志级别13.Gorm日志设置14.gin启动https支持15.Go Plugin介绍16.Golang漏洞管理17.可以丢掉123456了
18.如何优雅地退出程序
19.PGO前瞻20.go多版本管理21.openAI发布v0.2.0了22.Gin中间件开发23.Fabric区块链浏览器(1)24.每日一库:Memcache25.protojson简介26.每日一库:gosec27.Fabric区块链浏览器(2)28.每日一库:fsnotify简介29.gRPC with JWT30.embed简介31.Fabric区块链浏览器(3)32.每日一库:pprof简介33.go 1.21:cmp34.完全可复制、经过验证的 Go 工具链35.PGO in Go 1.2136.Fabric 2.x 智能合约开发记录37.为不断增长的Go生态系统扩展gopls38.每日一库:lumberjack -- 日志轮换和管理39.2023-04-26-微信安全模式下消息解析40.WASI support in Go41.每日一库:Prometheus42.如何实现流量控制和熔断降级?43.消息队列 - RabbitMQ44.Go 1.22 中的 For 循环45.设计模式之单例模式46.每日一库:使用Viper处理Go应用程序的配置47.使用 gopkg.in/yaml.v3 解析 YAML 数据48.在Go中如何实现并发49.解析类型参数50.设计模式之工厂模式51.每日一库:cobra 简介52.slices in Go 1.2153.go defer简介54.slice简介55.Golang Map底层实现简述56.Go 如何实现多态57.查找数组中第K大的元素58.go中的内存逃逸59.数组 vs. 切片60.队列(Queue):先进先出(FIFO)的数据结构61.go 中如何实现定时任务62.go 中的循环依赖63.Go中字符串处理:fmt.Sprintf与string.Builder的比较64.理解Go中的零值65.go 上下文:context.Context66.go中异常处理流程67.Go实现网络代理68.Why gRPC ?69.Go:条件控制语句70.Go 获取 IP 地址71.Golang并发控制方式有几种?72.Golang面试:泛型73.LRU算法简介74.MRU算法实现75.ARC算法实现76.Go语言中的交互式CLI开发:survey库简介77.C如何调用Go在Linux系统中执行操作时,进程可以通过发送和接收信号与其他进程进行通信。信号是用于通知进程发生特定事件或请求进程采取特定动作的软件中断。
以下是Linux系统中常见的一些信号及其含义:
- SIGINT (2):中断信号,通常由终端用户按下
Ctrl + C
发送给前台进程。该信号用于请求进程终止运行。 - SIGTERM (15):终止信号,用于请求进程正常终止。与SIGKILL相比,SIGTERM允许进程在收到信号后完成清理和退出工作。
- SIGKILL (9):杀死信号,用于强制终止进程。当进程收到此信号时,它将立即终止,不会进行任何清理操作。
- SIGSTOP (19):停止信号,用于暂停进程的执行。与SIGKILL不同,SIGSTOP信号可以通过发送SIGCONT信号来恢复进程的执行。
- SIGCONT (18):继续信号,用于恢复被SIGSTOP或SIGTSTP信号暂停的进程的执行。
- SIGHUP (1):挂起信号,通常由终端关闭或断开连接时发送给前台进程组的所有成员。进程可以选择在收到此信号时重新加载配置文件或重新初始化。
- SIGUSR1 (10)和SIGUSR2 (12):用户定义的信号,供应用程序自定义使用。
- SIGCHLD (17):子进程信号,父进程接收到此信号表示其子进程已终止或停止。
这些只是Linux系统中一些常见的信号,还有其他信号可以用于特定目的。您可以使用man
命令以及相关文档来获取更多有关信号的详细信息。
所以,当需要终止进程时,SIGKILL (信号编号为9) 和 SIGTERM (信号编号为15) 是两个常见的信号,但这两个信号还是有很大不同的:
- SIGKILL (9):
- 作用:SIGKILL信号用于强制终止进程。当进程收到SIGKILL信号时,它将立即被终止,没有机会进行清理或处理善后工作。
- 影响:SIGKILL信号是一种无法忽略或捕获的信号,因此进程无法阻止其接收或处理。它是最直接、最严厉的终止方式。
- 使用场景:通常在需要立即终止进程且不允许进程进行任何清理操作的情况下使用。但是,由于它不允许进程进行清理,因此在可以使用其他信号终止进程的情况下,最好先尝试使用其他信号。
- SIGTERM (15):
- 作用:SIGTERM信号用于请求进程正常终止。它是一种优雅的终止方式,给予进程完成清理工作的机会。
- 影响:进程可以捕获SIGTERM信号并编写信号处理程序来在接收到信号时执行自定义的清理操作。进程可以自行决定如何响应SIGTERM信号。
- 使用场景:当需要结束进程时,首选使用SIGTERM信号。它允许进程在接收到信号后进行必要的资源释放、保存数据或完成其他清理任务。通常,系统管理员或用户可以使用该信号向进程发送终止请求。
总结:SIGKILL是一种立即终止进程的信号,不允许进程进行任何清理操作。而SIGTERM是一种优雅的终止信号,给予进程完成清理工作的机会。在终止进程时,应首先尝试使用SIGTERM,只有在必要时才使用SIGKILL。
以下是标准的Linux信号,不同的操作系统和版本可能会有所差异:
信号编号 | 信号名称 | 描述 |
---|---|---|
1 | SIGHUP | 挂起信号,通常由终端关闭或断开连接时发送给前台进程组的所有成员 |
2 | SIGINT | 中断信号,通常由用户在终端按下Ctrl + C 发送给前台进程 |
3 | SIGQUIT | 退出信号,通常由用户在终端按下Ctrl + \ 发送给前台进程 |
4 | SIGILL | 非法指令信号,表示进程执行了非法、无效的指令 |
5 | SIGTRAP | 跟踪陷阱信号,通常由调试器使用 |
6 | SIGABRT | 中止信号,由进程自身调用abort() 函数引发 |
7 | SIGBUS | 总线错误信号,表示内存访问错误 |
8 | SIGFPE | 浮点异常信号,表示浮点运算错误 |
9 | SIGKILL | 终止信号,用于立即强制终止进程 |
10 | SIGUSR1 | 用户定义信号1 |
11 | SIGSEGV | 段错误信号,表示进程访问无效的内存段 |
12 | SIGUSR2 | 用户定义信号2 |
13 | SIGPIPE | 管道破裂信号,表示写入已关闭的管道 |
14 | SIGALRM | 闹钟信号,由alarm() 函数或定时器触发 |
15 | SIGTERM | 终止信号,用于请求进程正常终止 |
16 | SIGSTKFLT | 协处理器堆栈错误 |
17 | SIGCHLD | 子进程信号,父进程接收到此信号表示子进程已终止或停止 |
18 | SIGCONT | 继续信号,用于恢复被暂停的进程的执行 |
19 | SIGSTOP | 停止信号,用于暂停进程的执行 |
20 | SIGTSTP | 终端挂起信号,通常由用户在终端按下Ctrl + Z 发送给前台进程 |
21 | SIGTTIN | 后台进程读终端信号 |
22 | SIGTTOU | 后台进程写终端信号 |
23 | SIGURG | 紧急事件信号 |
24 | SIGXCPU | 超过CPU时间限制信号 |
25 | SIGXFSZ | 文件大小超过限制信号 |
26 | SIGVTALRM | 虚拟定时器信号 |
27 | SIGPROF | 进程定时器信号 |
28 | SIGWINCH | 窗口大小改变信号 |
29 | SIGIO | 异步I/O事件信号 |
30 | SIGPWR | 电源故障信号 |
31 | SIGSYS | 非法系统调用信号 |

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
2020-06-27 chaincode中使用第三方库
2019-06-27 [PyTorch入门之60分钟入门闪击战]之自动推倒