BlackHole开发日记-Java守护进程、Signal处理

2012-12-30

今天继续写单机版BlackHole。碰到一个问题,想要将程序作为系统进程,后台运行,并且在shell关闭时不退出,有两种办法:一种是使用nohup,一种是使用Deamon程序的开发方式来写Java,并引入很多框架,例如Apache Commons Daemon。后者觉得太重了,但是前者无法在控制台输出一些错误信息,也不够友好。最后用了一个很粗暴的方法:将错误输出重定向到一个文件,shell脚本退出的时候打印出来!赢了!

后来使用package maker做了一个安装包,比想象中好用,支持shell脚本什么的。

遇到一个问题,在mac下设置两个DNS,BlackHole为主DNS,结果仍然无法保证每次都使用BlackHole进行解析。后来索性改成只有一个DNS,127.0.0.1,倒是正常工作了。

这个单机版本我取名叫hostd,大概是hosts取代者的意思吧。因为要保证程序即使被kill之后也能做出一些释放资源的操作(在hostd里,需要把修改过的DNS改回来),所以给wifesays增加了一个响应,用了Java里一个响应信号量的api。

import sun.misc.Signal;  
import sun.misc.SignalHandler; 
Signal.handle(new Signal("TERM"), new SignalHandler() {

        @Override
        public void handle(Signal arg0) {
            shutDown();
        }

});

2012-12-31

新年的最后一天,大家都无心上班,那么我就在上班时间鼓捣项目了!将hostd完善了一下,加入了实时响应配置更改的机制。

开始的想法是通过md5来判断文件内容是否被更改,但是这样每隔一个周期就必须完全load一次文件,不划算;后来想到,为什么不直接用文件的最后修改时间呢?大多数情况下,只要是人工修改的配置文件,多个配置文件的修改时间是不可能相同的,在Java里直接可以用file.lastModified()来查看,多方便!

晚上写了一篇广告帖,效果不好,大家都去过节去了嘛。

后来有个以前搞手机的同事回复我,手机上目前没有方便的hosts修改工具。android下改hostd是需要重启的,相当麻烦。于是感觉找到一个很大的应用场景了!

2013-1-1

新的一年,新的日期格式,稍微有点不习惯。今天抽空看了一点Android开发的东西,鼓捣了一下adt。网易有个公开课讲android的,个人认为讲的不错,正好学点英语,地址密西西比河谷州立大学:Android应用程序开发。
因为视频有点模糊,附上其他地址:原文,讲义,源码

你可能感兴趣的:(java,dns,BlackHoleJ,Hostd)