轉自:http://tech.ccidnet.com/art/302/20070618/1115599_1.html
- 簡單而有用的nohup命令在UNIX/LINUX中,普通進程用&符號放到后台運行,如果啟動該程序的控制台logout,則該進程隨即終止。
- 要實現守護進程,一種方法是按守護進程的規則去編程(本站有文章介紹過),比較麻煩;另一種方法是仍然用普通方法編程,然后用nohup命令啟動程序:
nohup<程序名>&
則控制台logout后,進程仍然繼續運行,起到守護進程的作用(雖然它不是嚴格意義上的守護進程)。
- 使用nohup命令后,原程序的的標准輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用,實現了完整的守護進程功能。
ygwu @ 2005年04月18日 上午10:03
For example:
- 如何遠程啟動WebLogic服務?
用telnet遠程控制服務器,遠程啟動WEBLOGIC服務,啟動后關閉telnet,WebLogic服務也跟着停止,這是因為使用telnet啟動的進程會隨着telnet進程的關閉而關閉。所以我們可以使用一些UNIX下的命令來做到不關閉。
使用如下命令:
nohup startWeblogic.sh&
如果想要監控標准輸出可以使用:
tail -f nohup.out
- 當在后台運行了程序的時候,可以用jobs命令來查看后台作業的狀態。在有多個后台程序時,要使用來參數的fg命令將不同序號的后台作業切換到前台上運行。
- 當用戶啟動一個進程的時候,這個進程是運行在前台,使用與相應控制終端相聯系的標准輸入、輸出進行輸入和輸出。即使將進程的輸入輸出重定向,並將進程放在后台執行,進程仍然和當前終端設備有關系。正因為如此,在當前的登錄會話結束時,控制終端設備將和登錄進程相脫離,那么系統就向所有與這個終端相聯系的進程發送SIGHUP的信號,通知進程線路已經掛起了,如果程序沒有接管這個信號的處理,那么缺省的反應是進程結束。因此普通的程序並不能真正脫離登錄會話而運行進程,為了使得在系統登錄后還可以正常執行,只有使用命令nohup來啟動相應程序。
- 使用命令nohup當然可以啟動這樣的程序,但nohup啟動的程序在進程執行完畢就退出,而常見的一些服務進程通常永久的運行在后台,不向屏幕輸出結果。在Unix中這些永久的后台進程稱為守護進程(daemon)。守護進程通常從系統啟動時自動開始執行,系統關閉時才停止。
- 在守護進程中,最重要的一個是超級守護進程inetd,這個進程接管了大部分網絡服務,但並不是對每個服務都自己進行處理,而是依據連接請求,啟動不同的服務程序與客戶機打交道。inetd支持網絡服務種類在它的設置文件/etc/inet.conf中定義。inet.conf文件中的每一行就對應一個端口地址,當inetd接受到連接這個端口的連接請求時,就啟動相應的進程進行處理。使用inetd的好處是系統不必啟動很多守護進程,從而節約了系統資源,然而使用inetd啟動守護進程相應反應會遲緩一些,不適合用於被密集訪問的服務進程。