
我有一個永遠運行的罐子(帶有套接字偵聽線程的無限循環)並且需要它始終在後台運行。例如:“java -jar test.jar” 我該如何執行此操作?先致謝!
答案1
幾種方式:
追加
&
在後面。但是,使用此功能,如果您關閉啟動程序的終端,程式仍將終止。啟動一個
screen
會話,並啟動其中的程式;您可以分離screen
會話並關閉終端機。稍後,您可以再次附加到會話,並發現自己回到了控制台,就像您一直在那裡一樣。但是,您需要在運行程式之前啟動螢幕會話,如果您忘記這樣做,則無法執行任何操作。disown
從 shell使用作業控制。這會將任務與您的 tty 分離,並且當 tty 關閉時您的程式不會終止。但是,我不認為有任何方法可以重新連接已被拒絕的工作。
答案2
我一直在長時間運行時使用的命令行提示符是“nohup”,所以在你的情況下是
nohup java -jar test.jar &
& 很重要,這樣您就可以執行另一個 shell。我相信這不會透過重新啟動而持續下去。
答案3
如果「始終」是指它在電腦啟動時啟動,則需要將其作為啟動時腳本的一部分啟動。執行此操作的骯髒方法是添加
java -jar test.jar >/dev/null 2>&1 &
到/etc/rc.local
(或替換/dev/null
為您最喜歡的日誌檔案)。
更好的方法是製作一個init.d
在適當的運行等級啟動的腳本(例如,您可能不希望它在運行等級 0、1 或 6 上啟動)。這樣,您還可以讓它在死機時自動重新啟動,並有一個更好的介面來暫時停止它。
小例子位於http://www.howtoforge.com/forums/archive/index.php/t-3628.html
大解釋在http://developer.novell.com/wiki/index.php/Writing_Init_Scripts
答案4
您可以透過在命令列末尾附加「&」符號來在 Linux 上的後台運行任何任務,例如
java -jar test.jar &