正确地kill 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) 又有什么错呢?
Read more…

2009/11/04 | Posted in Development Skills

基于OS信号实现Java异步通知

本文将结合操作系统的信号机制,来尝试实现一个简单的,不依赖功能环境的Java异步通知功能。
没有特殊说明,本文所有的示例,都是基于Linux。

信号简介

信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。
通俗来讲,信号就是进程间的一种异步通信机制。

典型的例子:
kill -s SIGKILL pid (即kill -9 pid) 立即杀死指定pid的进程。
在上面这个例子中,SIGKILL就是往pid进程发送的信号。

信号及其效果列表
http://docs.google.com/View?id=dtbhrmv_754gh86rcg4
Read more…

2009/11/04 | Posted in JVM

基于Fluent Interface设计的xml工具-xmlzen

今早,发现了一个非常轻量级的xml解析生成工具。整个工具就2个类,一个XmlBuilder,一个XmlSlicer。
最重要的是,它是基于Fluent Interface设计的(连贯接口设计, 大大简化编码量)。

工具最大的特色如作者在主页上所说的一句话,Forget W3C, and terrible APIs。
下面是摘自官方的一个关于生成xml的例子:

Code

String xml = XmlBuilder.newXml("UTF-8", true)
    .openTag("xml").withAttribute("id", 1)
        .openTag("thisishow")
            .withValue("you can build")
        .closeTag()
        .openTag("your").withAttribute("xml", "nicely").toString(true);

xmlzen example

项目主页:http://code.google.com/p/xmlzen/

2009/10/26 | Posted in Development Skills

Google Calendar不在线收不到sms提醒

此前,我在用google calendar时,经常碰到收不到sms提醒的这种情况。于是,今天心血来潮,抽时间帮google做了一会功能测试。

得出结论是:
开着网页,与google server保持连接的时,任何一个新建的task都能准时收到sms提醒。
问题出在,如果你新建好task后,关闭了浏览器,此时google发现你与server的连接中断。它就会在轮询你的任务列表时,忽略sms短信提醒或降低其优先级(反正我关闭后,就没收到过)。

2009/10/23 | Posted in Others

适合程序员的健康作息时间表

7:30:起床。英国威斯敏斯特大学的研究人员发现,那些在早上5:22―7:21 分起床的人,其血液中有一种能引起心脏病的物质含量较高,因此,在7:21之后起床对身体健康更加有益。打开台灯。“一醒来,就将灯打开,这样将会重新调整体内的生物钟,调整睡眠和醒来模式。”拉夫堡大学睡眠研究中心教授吉姆·霍恩说。喝一杯水。水是身体内成千上万化学反应得以进行的必需物质。早上喝一杯清水,可以补充晚上的缺水状态。

7:30―8:00:在早饭之前刷牙。“在早饭之前刷牙可以防止牙齿的腐蚀,因为刷牙之后,可以在牙齿外面涂上一层含氟的保护层。要么,就等早饭之后半小时再刷牙。”英国牙齿协会健康和安全研究人员戈登·沃特金斯说。

8:00―8:30:吃早饭。“早饭必须吃,因为它可以帮助你维持血糖水平的稳定,”伦敦大学国王学院营养师凯文·威尔伦说。早饭可以吃燕麦粥等,这类食物具有较低的血糖指数。

8:30―9:00:避免运动,上班。来自布鲁奈尔大学的研究人员发现,在早晨进行锻炼的运动员更容易感染疾病,因为免疫系统在这个时间的功能最弱。步行上班。马萨诸塞州大学医学院的研究人员发现,每天走路的人,比那些久坐不运动的人患感冒病的几率低25%。
Read more…

2009/10/11 | Posted in Life

改造WordPress Related Posts按分类检索

WordPress Related Posts是一个国人开发的,按tag检索相关日志的wordpress插件。
使用该插件的前提是,你的文章中必须有加入tag标签。

对于某些人来说,好不容易写完一篇日志,还要从正文中抽取tag是一件非常痛苦的事情。(别跟我说使用XX seo插件,这类插件精准度太低,还不如不用)
定期重建tag更是耗费精力。

本文旨在帮助那些没有使用tag,但却想在wordpress中加入相关日志的朋友。
我的相关日志检索方案是利用日志所属分类,随机查询分类下的日志并按发表时间从现在到以前排序实现的。

这个方案,需要修改部分Wordpress Related Posts插件的代码,不过很简单.
首先,用文本编辑器打开插件目录下的 wp_related_posts.php
Read more…

2009/10/10 | Posted in Others

java动态跟踪分析工具BTrace实现原理

今天,Team Leader推荐了一个非常棒的动态跟踪分析工具 – BTrace。由于对它的实现原理非常感兴趣,于是花了点时间研究了一下,顺便写点心得。

什么是BTrace?
BTrace是SUN Kenai云计算开发平台下的一个开源项目。旨在为java提供安全可靠的动态跟踪分析工具。

Btrace基于动态字节码修改技术(Hotswap)来实现运行时java程序的跟踪和替换。(还记得javarebel不?)
Btrace的脚本是用纯java编写的,基于一套官方提供的annotation,使跟踪逻辑实现起来异常简单。
Read more…

2009/10/09 | Posted in JVM