BlackHole開發日記-Java守護進程、Signal處理

####2012-12-30html

今天繼續寫單機版BlackHole。碰到一個問題,想要將程序做爲系統進程,後臺運行,而且在shell關閉時不退出,有兩種辦法:一種是使用nohup,一種是使用Deamon程序的開發方式來寫Java,並引入不少框架,例如Apache Commons Daemon。後者以爲過重了,可是前者沒法在控制檯輸出一些錯誤信息,也不夠友好。最後用了一個很粗暴的方法:將錯誤輸出重定向到一個文件,shell腳本退出的時候打印出來!贏了!android

後來使用package maker作了一個安裝包,比想象中好用,支持shell腳本什麼的。shell

遇到一個問題,在mac下設置兩個DNS,BlackHole爲主DNS,結果仍然沒法保證每次都使用BlackHole進行解析。後來索性改爲只有一個DNS,127.0.0.1,卻是正常工做了。api

這個單機版本我取名叫hostd,大概是hosts取代者的意思吧。由於要保證程序即便被kill以後也能作出一些釋放資源的操做(在hostd裏,須要把修改過的DNS改回來),因此給wifesays增長了一個響應,用了Java裏一個響應信號量的api。app

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完善了一下,加入了實時響應配置更改的機制。ide

開始的想法是經過md5來判斷文件內容是否被更改,可是這樣每隔一個週期就必須徹底load一次文件,不划算;後來想到,爲何不直接用文件的最後修改時間呢?大多數狀況下,只要是人工修改的配置文件,多個配置文件的修改時間是不可能相同的,在Java裏直接能夠用file.lastModified()來查看,多方便!工具

晚上寫了一篇廣告帖,效果很差,你們都去過節去了嘛。code

後來有個之前搞手機的同事回覆我,手機上目前沒有方便的hosts修改工具。android下改hostd是須要重啓的,至關麻煩。因而感受找到一個很大的應用場景了!視頻

####2013-1-1

新的一年,新的日期格式,稍微有點不習慣。今天抽空看了一點Android開發的東西,鼓搗了一下adt。網易有個公開課講android的,我的認爲講的不錯,正好學點英語,地址密西西比河谷州立大學:Android應用程序開發。 由於視頻有點模糊,附上其餘地址:原文講義源碼

相關文章
相關標籤/搜索