易截截图软件、单文件、免安装、纯绿色、仅160KB

在linux/unix下,你是怎么中止一个java进程的?


在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) 带来的问题
先看一段程序
/**
* Shutdown Hook Presentation
*
* @author Ken Wu
*/
public class ShutdownHookTest {
 
private static final void shutdownCallback() {
System.out.println("Shutdown callback is invoked.");
}
 
public static void main(String[] args) throws InterruptedException {
Runtime.getRuntime().addShutdownHook(new Thread() {
 
@Override
public void run() {
shutdownCallback();
}
 
});
Thread.sleep(10000);
}
 
}
在上面这段程序中,我使用Runtime为当前java进程添加了一个ShutdownHook,它的作用是在java正常退出时,执行shutdownCallback()这个回调方法。
此时,如果你试验过在java进程未自动退出前,执行 kill -9 pid,即发送 SIGNKILL 信号,会发现这个回调接口是不会被执行的。这是SIGNKILL信号起的作用。
对于我这个简单的测试用例来说,不被执行也无大碍。但是,如果你的真实系统中有需要在java进程退出后,释放某些资源。
而这个释放动作,因为SIGNKILL被忽略了,那就可能造成一些问题。
所以,推荐大家使用标准的kill进程方式,即 kill -15 pid。
作者:Ken Wu 原文链接:http://kenwublog.com/kill-java-correctly


相关文档:

澄清java语言接口与继承的本质

OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。(cowboy的名言是"抽象就是抽去像的部分",看似调侃,实乃至理)。
设计模式中最基础的是工厂模式(Factory),在我最 ......

java的内存和堆栈

原文地址:为了备忘,转载自http://www.j2megame.org/index.php/content/view/1989/125.html
1. java中堆与栈
在Java程序运行时,有6个地方可以用于保存数据:
(1) 寄存器。最快的保存区域,位于处理器内部,数量十分有限,它是根据需要由编译器分配。我们对此没有直接的控制权.
(2)
栈(stack)。驻留于常规RAM(随机 ......

Java Web Start

Java Web Start 是帮助客户机端应用程序开发的一个新技术,它的独特之处在于将您从关心客户机是如何启动的(从 Web 浏览器或是桌面)中解放出来。另外,该技术提供了一个使 Web 服务器能独立的分发和更新客户机代码的集合部署方案。
    Java Web Start 是一个软件技术,它包含了 applet 的可移植性、Servl ......

linux系统下查看和设置日期时间的命令

linux系统下查看和设置日期时间的命令都是date。
查看日期时间命令:date
设置日期时间命令:date -s [date|time]
设置系统日期和时间为:2008年9月9日14时25分49秒
date -s '20080909 14:25:49'   //一定要加引号才行。 ......

linux命令系列之一

du wzwz -h                  查看目录或者文件wzwz占用空间的大小
ls -1                        &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号