2017-07-21 131 views
0

在java中,我需要製作一個unix守護進程。所以我需要創建套接字然後fork,以便systemd知道服務已經準備就緒。在java中製作unix守護進程

在C,這是正常完成這樣的:

int main() { 
    initialise_socket(); 
    daemon(0,0); 
} 

這樣當進程終止時,systemd(或暴發戶,或者sysvinit的)知道守護進程是準備接受連接,並依賴守護進程現在可以開始了。

我的問題是:我怎麼能在java中做到這一點?

我用google搜索了一下,發現很多關於使用nohup開始java的錯誤建議,這些都不是我需要做的事情。

+1

可能的重複[如何守護Java程序?](https://stackoverflow.com/questions/534648/how-to-daemonize-a-java-program) –

+0

@AdamMichalik它與此無關題。這是關於脫離shell的問題,我已經提到它與我所需要的不相關。 – LtWorf

+0

似乎有人刪除了我的答案;)無論如何,爲了記錄。你可以在這裏找到解決方案:http://jnicookbook.owsiak.org/recipe-No-022/和這裏http://jnicookbook.owsiak.org/recipe-no-029/ – mko

回答

0

純Java應用程序(不使用JNI =本機C代碼)無法自我守護 - 在JDK中沒有方法。你可以做的是運行java過程中使用deamonizing實用程序(即運行應用程序的虛擬機),喜歡start-stop-daemon

-1

我已經使用了Apache模塊公共守護進程來實現UNIX上的後臺程序。

https://wiki.apache.org/commons/Daemon

這不是在C寫一個守護進程靈活,但它到底是足夠的。

這個用法很簡單。你只需要實現一個啓動和停止方法。