java应用终止进程方式

1、kill命令

kill -15

  • 原理kill -15 是向进程发送 SIGTERM(信号15)信号。这是一个“终止”信号,通知进程自行终止运行。

  • 行为:当进程接收到 SIGTERM 信号时,它有机会进行清理操作,比如关闭文件、释放资源、保存状态等。进程可以选择响应这个信号并优雅地退出,也可以选择忽略它。

  • 适用场景:这是终止进程的首选方式,因为它允许进程以一种“优雅”的方式结束,避免数据丢失或资源泄漏。

kill -9

  • 原理kill -9 是向进程发送 SIGKILL(信号9)信号。这是一个“强制终止”信号。

  • 行为:与 SIGTERM 不同,SIGKILL 信号不能被进程捕获或忽略。操作系统会直接终止进程,而不给进程任何清理资源的机会。这可能导致文件未保存、资源未释放等问题。

  • 适用场景:当进程无法响应 SIGTERM 信号(例如进程卡死或陷入无限循环)时,kill -9 是一种强制终止进程的手段。但应尽量避免频繁使用,因为它可能会导致数据丢失或系统不稳定。

区别

特性kill -15kill -9
信号类型SIGTERM(可捕获)SIGKILL(不可捕获)
行为进程有机会清理资源并优雅退出强制终止进程,不进行清理
适用场景常规终止进程强制终止无响应的进程
风险可能被进程忽略可能导致数据丢失或资源泄漏

2、java方式 

System.exit()

  • 原理System.exit() 是 Java 标准库提供的一个静态方法,用于终止当前正在运行的 Java 虚拟机(JVM)。该方法接受一个整数参数作为退出状态码,通常 0 表示正常退出,非零值表示异常退出。
  • 示例代码
    public class ExitExample {
        public static void main(String[] args) {
            // 正常退出
            System.exit(0);
        }
    }
  • 注意事项:调用 System.exit() 会立即终止 JVM,不会给其他线程执行清理操作的机会,可能会导致资源泄漏等问题。

注册关闭钩子(Shutdown Hook)

  • 原理:Java 提供了关闭钩子(Shutdown Hook)机制,允许在 JVM 关闭之前执行一些清理操作。可以通过 Runtime.getRuntime().addShutdownHook() 方法注册一个 Thread 对象,当 JVM 收到终止信号(如 SIGTERM)时,会启动这个线程执行清理操作。
  • 示例代码
public class ShutdownHookExample {
    public static void main(String[] args) {
        // 注册关闭钩子
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("Performing cleanup operations...");
            // 执行清理操作,如关闭文件、释放资源等
        }));

        // 主线程继续执行其他操作
        System.out.println("Main thread is running.");

        // 模拟正常退出
        System.exit(0);
    }
}
  • 日志如下:
Main thread is running.
Performing cleanup operations...

3、spring boot

Spring Boot Actuator

通过 HTTP 请求调用 /actuator/shutdown 端点,让 Spring Boot 应用程序优雅地关闭。

curl -X POST http://localhost:8080/actuator/shutdown

4、docker

  • 作用:停止 Docker 容器。

  • 机制

    • 默认发送 SIGTERM 信号给容器内的主进程,允许进程优雅退出。

    • 如果进程在超时时间(默认 10 秒)内未退出,则发送 SIGKILL 信号强制终止。

  • 特点

    • 支持优雅关闭,但超时后会强制终止。

    • 适用于容器化应用的停止。

  • 使用场景:停止 Docker 容器时使用。

  • 示例

    docker stop <container_id>

5、Kubernetes

滚动更新

  • 作用:更新 Kubernetes 中的 Pod,确保应用在更新过程中不中断服务。

  • 机制

    • 逐步用新版本的 Pod 替换旧版本的 Pod。

    • 默认会向旧 Pod 发送 SIGTERM 信号,允许应用优雅关闭。

    • 如果 Pod 未在 terminationGracePeriodSeconds(默认 30 秒)内退出,则发送 SIGKILL 信号强制终止。

  • 特点

    • 支持优雅关闭和零停机更新。

    • 适用于 Kubernetes 集群中的应用更新。

  • 使用场景:在 Kubernetes 中更新应用时使用。

  • 示例

    kubectl set image deployment/<deployment_name> <container_name>=<new_image>

6、总结

  • 优先选择优雅退出:通过关闭钩子、标志位或线程中断等方式,确保资源释放和数据一致性。

    • kill -15curl -X POST /actuator/shutdowndocker stop 和 Kubernetes 滚动更新都支持优雅关闭,但超时后会强制终止。

  • 避免强制终止:除非进程无法响应,否则尽量避免使用强制终止方法。

    • kill -9 是最后的手段,可能会导致资源泄漏或数据不一致。

  • 结合实际场景:根据应用类型(如 Spring Boot、守护进程等),选择最适合的终止方式。

    • kill -9 和 kill -15 适用于操作系统级别的进程管理。

    • curl -X POST /actuator/shutdown 适用于 Spring Boot 应用。

    • docker stop 适用于 Docker 容器。

    • Kubernetes 滚动更新适用于 Kubernetes 集群中的应用更新。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp+微信小程序+地图+传入多个标记点显示+点击打开内置地图导航+完整代码

一、效果展示 二、完整代码 <template><view class"container"><map class"map-container" :latitude"latitude" :longitude"longitude" :markers"markers" :controls"controls" show-location m…

高效数据管理:WPF中实现带全选功能的DataGrid复选框列

目录 引言项目结构与准备工作XAML布局设计后台代码实现视图模型设计总结引言 在许多应用场景中,我们需要在表格中选择多行数据进行批量操作,如删除、导出等。为了提高用户体验,通常会在表格的第一列添加一个复选框,允许用户逐个或批量选择数据项。本文将详细介绍如何在 WP…

一周学会Flask3 Python Web开发-SQLAlchemy简介及安装

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;…

《Linux C 智能 IO 矩阵:输入输出的自适应数据流转》

1. 标准库IO简介 标准库IO特点&#xff1a;通过操作系统提供的接口&#xff08;API&#xff09;和操作系统进行交互。&#xff08;接近100个函数&#xff09; 1.1. IO的过程 操作系统&#xff1a;向上为用户提供操作接口&#xff0c;向下为统筹控制硬件。 操作系统的组成&#…

【大模型理论篇】--Mixture of Experts架构

Mixture of Experts&#xff08;MoE&#xff0c;专家混合&#xff09;【1】架构是一种神经网络架构&#xff0c;旨在通过有效分配计算负载来扩展模型规模。MoE架构通过在推理和训练过程中仅使用部分“专家”&#xff08;子模型&#xff09;&#xff0c;优化了资源利用率&#x…

智能云呼叫中心如何升级企业服务?带来新商机

当某国际零售品牌通过部署云呼叫中心将客服响应效率提升73%时&#xff0c;这场由云计算掀起的客户服务革命已悄然渗透到企业运营的毛细血管。在数字化转型的深水区&#xff0c;云呼叫中心正从"成本中心"蜕变为"价值引擎"&#xff0c;推动企业构建差异化的服…

java+jvm笔记

JUC synchornized原理&#xff08;java锁机制&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 升级顺序&#xff1a; 无锁偏向锁&#xff0c;只有一个线程来访问轻量级锁&#xff0c;有两个线程交替访问重锁&#xff0c;两个及以上线…

CES Asia 2025增设未来办公教育板块,科技变革再掀高潮

作为亚洲消费电子领域一年一度的行业盛会&#xff0c;CES Asia 2025&#xff08;第七届亚洲消费电子技术贸易展&#xff09;即将盛大启幕。今年展会规模再度升级&#xff0c;预计将吸引超过500家全球展商参展&#xff0c;专业观众人数有望突破10万。除了聚焦人工智能、物联网、…

Sass 模块化革命:深入解析 @use 语法,打造高效 CSS 架构

文章目录 前言use 用法1. 模块化与命名空间2. use 中 as 语法的使用3. as * 语法的使用4. 私有成员的访问5. use 中with默认值6. use 导入问题总结下一篇预告&#xff1a; 前言 在上一篇中&#xff0c;我们深入探讨了 Sass 中 import 语法的局限性&#xff0c;正是因为这些问题…

AI-Deepseek + PPT

01--Deepseek提问 首先去Deepseek问一个问题&#xff1a; Deepseek的回答&#xff1a; 在汽车CAN总线通信中&#xff0c;DBC文件里的信号处理&#xff08;如初始值、系数、偏移&#xff09;主要是为了 将原始二进制数据转换为实际物理值&#xff0c;确保不同电子控制单元&…

解锁前端表单数据的秘密旅程:从后端到用户选择!✨

&#x1f604; 解锁前端表单数据的秘密旅程&#xff1a;从后端到用户选择&#xff01;✨ 嘿&#xff0c;技术爱好者们&#xff01;&#x1f44b; 你有没有在开发中遇到过这样的困惑&#xff1a;表单里的数据&#xff08;比如图片附件、识别点 ID&#xff09;从哪儿来的&#x…

【Linux】进程间通信 续

目录 管道的原理&#xff08;匿名管道&#xff09; 核心原理 站在内核的角度看管道的本质 接口 创建管道文件 代码示例 管道的特征 管道读写端的四种情况 管道的应用场景 命令行的管道。 使用管道实现进程池 初始化 控制子进程 退出 命名管道 命名管道的理解 …

宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪

2025年3月5日&#xff0c;机器人行业龙头宇树科技&#xff08;Unitree&#xff09;在深圳再添新动作——全资子公司深圳天羿科技有限公司正式成立。这家注册资本10万元、法定代表人周昌慧的新公司&#xff0c;聚焦智能机器人研发与销售&#xff0c;标志着宇树科技在华南市场的战…

AI-Ollama本地大语言模型运行框架与Ollama javascript接入

1.Ollama Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;平台&#xff0c;旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型&#xff0c;支持文本生成、翻译、代码编写、问答等多种…

SQLAlchemy系列教程:基本数据类型及自定义类型

在SQLAlchemy、Python SQL工具包和ORM中定义模型时&#xff0c;理解基本数据类型至关重要。本教程提供了在SQLAlchemy模型中有效使用内置基本类型的指南。 SQLAlchemy中的基本类型 SQLAlchemy支持一组与SQL数据库类型一致的基本数据类型。SQLAlchemy中的每种类型都为各种SQL类…

K8s The connection to the server 192.168.56.120:6443 was refused报错解决

虚拟机获取不到其他node节点的信息&#xff0c;通过使用docker ps -a 排查看到k8s的组件都是exited的状态&#xff0c;通过手动拉起docker 镜像id 起来之后&#xff0c;又变为exited的状态&#xff01;&#xff01;&#xff01; 解决方法&#xff1a;重置k8s集群 使用 kubeadm…

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch数据更新与删除深度解析&#xff1a;2.3.1 避免频繁更新&#xff08;Update by Query的代价&#xff09;案例背景1. Update by Query的内部机制解析1.1 文档更…

Baklib内容中台赋能企业智管

内容中台构建全场景智管 现代企业数字化运营中&#xff0c;全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构&#xff0c;企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例&#xff0c;其利用中台系统将分散在CRM、ERP及内部文档…

今天来介绍和讨论 AGI(通用人工智能)

首先介绍&#xff0c;AGI&#xff08;通用人工智能&#xff09;是什么&#xff1f; AGI&#xff08;Artificial General Intelligence&#xff0c;通用人工智能&#xff09;指的是能够像人类一样理解、学习、推理和解决广泛任务的人工智能系统。与目前的AI不同&#xff0c;AGI可…