易截截图软件、单文件、免安装、纯绿色、仅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


相关文档:

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

JAVA事件的总结

JAVA事件无非就是键盘事件,鼠标事件,按钮等事件。专业点可以分为语义事件(按钮等到事件)和低层事件(键盘事件,鼠标事件);
下面我简要的总结一下:
1、鼠标事件:点鼠标按钮事它会调用三个监听器方法:mousePressed,mouseReleased,mouseClicked.
鼠标事件提供了mousePressed,mouseClicked,mouseDragged,mouseEnter ......

Java 基础题

 在网上找了点基础题目,自己做了做,下面是题目:
  1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。
  2.字符串的操作:
   写一个方法,实现字符串的反转,如:输入abc,输出cba
   写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtc ......

Linux社区老大曝驱逐Google Android内幕


Linux内核维护者Greg Kroah-Hartman曾宣布,从Linux
2.6.33版本开始,Google智能手机操作系统Android核心代码将被删除。很多人对此十分关注,毕竟Google
Android受到了很好的评价,作为Linux的一员能帮助开源社区实现更好的发展,对此,Greg昨日在官方博客中作出了解释。
Greg表示,自己使用的手机就是运行Android的G1 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号