在linux/unix下,你会怎么中止一个java应用或进程?
多数人可能会回答 kill -9 pid,这是一种在多数情况下正确的做法。不过本文打算阐述使用kill -9带来的一些问题,并给出另一种标准的kill方式。
标准中断信号
在Linux信号机制中,存在多种进程中断信号(Linux信号列表 )。其中比较典型的有 SIGNKILL(9) 和 SIGNTERM(15).
SIGNKILL(9) 和 SIGNTERM(15) 的区别在于:
SIGNKILL(9) 的效果是立即杀死进程. 该信号不能被阻塞, 处理和忽略。
SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。
由此可见,SIGNTERM(15) 才是理论上标准的kill进程信号。
那使用 SIGNKILL(9) 又有什么错呢?
SIGNKILL(9) 带来的问题
先看一段程序
public static void main(String[] args) {
// 注册终止回调函数
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
shutdownCallback();
}
});
private static void shutdownCallback() {}
分享到:
相关推荐
在Linux系统中,Java应用程序通常以两种主要方式运行:直接通过命令行或作为守护进程(daemon)。本篇文章将深入探讨如何使用`sh`脚本来启动Java的JAR程序,并将其设置为守护进程,以便在后台持续运行,即使用户注销...
本文将详细介绍如何使用Java代码实现基于进程名称的进程终止功能,特别是针对Windows操作系统下的`java-test.exe`进程。这不仅适用于开发者调试自身程序时的需求,也适用于系统管理员批量管理运行在Windows服务器上...
通过本文的学习,您应该掌握了如何使用`ps`命令来查看Linux系统中的进程信息以及如何使用`kill`命令来终止进程。这两种命令是Linux系统管理中非常实用的工具,对于日常运维工作具有重要意义。正确地使用它们可以帮助...
这些文件的代码分析可以帮助进一步理解Java进程管理的实践应用。 总结来说,Java提供了一套机制来创建和管理进程,但直接根据命令行参数或PID删除进程则需要借助操作系统特定的工具或API。理解和掌握这些概念对于...
为了遵循这些设计原则,不允许 Linux 内核在进程一终止后就丢弃包含在进程描述符字段中的数据。只有父进程发出了与被终止的进程相关的 wait() 类系统调用之后,才允许这样做。这就是引入僵死状态的原因:尽管从技术...
Eclipse打包Java应用程序及在Linux系统上的...本文详细介绍了使用Eclipse将Java应用程序打包成JAR文件,并在Linux系统上部署和运行的步骤,包括创建JAR文件、在CentOS上部署和运行、设置环境变量、终止SMSAPI等步骤。
在Linux环境中独立执行Java程序,通常是因为需要在非容器环境下运行,这可能涉及到对系统资源的直接访问,例如配置数据库连接、管理日志文件或加载第三方库。在没有Web容器支持的情况下,我们需要手动配置和管理这些...
2. 查看Java进程详细信息:`jps` 命令可以查看Java进程详细信息。 3. 查看Java堆栈信息:`jstack` 命令可以查看Java堆栈信息。 4. 查看Java内存信息:`jmap` 命令可以查看Java内存信息。 5. 查看Java垃圾回收信息:`...
为了确认Tomcat是否已经成功关闭,可以使用`ps`命令查看是否有相关的Java进程还在运行。 ```bash ps -ef | grep tomcat ``` 如果没有输出与Tomcat相关的进程信息,则表示Tomcat已经成功关闭。 #### 三、强制...
当我们调用`Runtime.getRuntime().exec(command)`时,实际上是在当前Java进程中启动了一个新的子进程。这个子进程没有自己的控制台或终端窗口,其标准输入、标准输出和标准错误都会被重定向到父进程的相应流中。具体...
僵尸进程是计算机操作系统中的一种特殊状态,当一个进程执行完毕并退出,但其父进程尚未读取其退出状态时,这个已结束的进程就会成为僵尸进程。它的主要特征是进程已不再执行任何代码,但其进程描述符仍然存在于内存...
Linux 操作系统中,查看和终止进程是非常重要的任务。下面将对 ps 命令和 kill 命令进行详细的介绍。 1. ps 命令 ps 命令是 Linux 中最强大的进程查看命令。它可以确定当前有哪些进程正在运行、进程的状态、进程...
守护进程在Linux或Unix等类Unix系统中广泛存在,但Java作为一种跨平台的语言,其本身并不直接支持守护进程的概念。不过,由于Java的跨平台特性,开发者可以通过模拟实现类似的功能。 在Java中,我们可以利用线程...
在Linux或Unix系统中,通常使用`jps`(Java进程查看器)命令找到Java进程ID,然后使用`kill`命令终止进程。一个简单的`stop.sh`脚本可能如下所示: ```bash #!/bin/bash # 查找Java进程 JAVA_PROCESS=$(jps | grep...
在Java中,可以利用线程类(Thread)或者实现Runnable接口来创建和管理进程。模拟进程调度涉及到: 1. 创建进程对象,每个对象代表一个待调度的任务。 2. 实现调度算法,根据选择的算法决定下一个执行的进程。 3. ...
Linux 进程管理是指在Linux操作系统中管理和控制进程的一系列操作和技术。进程是程序在计算机上的一次执行过程,是系统进行资源分配和调度的基本单位。Linux提供了丰富的工具来帮助用户和系统管理员监控和管理这些...
- 脚本中使用`kill`命令强制终止Java程序,但这种方式可能带来风险,如数据丢失或不完整。在生产环境中,应当添加额外的检查逻辑,确保在停止程序前完成必要的清理操作。 5. **脚本的通用性**: 这个脚本设计为...
- **终止Tomcat进程**:通过`kill`命令结束指定的进程ID。 - **命令行下访问网络**:利用`wget`命令从命令行访问网络资源。 - **RPM包管理**:使用`rpm -qa`命令列出已安装的所有RPM包;使用`rpm -e 包名`卸载指定的...
在操作系统中,进程是程序在执行时的一个实例,拥有自己的内存空间和资源。当进程由于各种原因如内存溢出、非法指令、硬件故障或系统错误而崩溃时,服务可能会中断,导致用户受到影响。为确保服务的连续性和稳定性,...
在nis-(etc-profile)-kill的例子中,可能的脚本内容可能是检查NIS服务的状态,根据配置更新`/etc/profile`文件,然后终止与NIS相关的进程。具体的实现细节会根据具体需求而变化,但上述的核心概念和命令会在其中起到...