linux後台運行和開機啟動篇【一】__linux

來源:互聯網
上載者:User

本篇將會講解linux的如何後台運行一個程式以及開機啟動機制和如果設定開機啟動,同時會提供一些參考資料。

 

先說如何後台運行,確切的手勢終端關閉後終端中啟動的進程不被結束。

我們都知道linux的程式是以終端為單位的。如果在終端中啟動了某個程式,當終端關閉後,相應的程式也會終止。

為什麼會這樣呢。因為linux中某個終端啟動的進程都是其子進程,當終端關閉後,linux就會收到hung  up (掛電話的意思)的訊號,然後把對應終端的子進程都關閉,然後就沒有然後了。。。

 

 

所以要使某個進程不被結束,有兩種辦法:

1.讓linux忽略終端的hung up 訊號,不關閉進程;

2.讓此進程變為終端的非子進程。

 

第一種的實現方案就是nohup命令。

例如要啟動jboss,可以nohup  ./run.sh  &。這樣就可以了,結尾的“&”符號表示後台啟動jboss,從而不影響繼續運行其他命令。

 

但這樣有一個問題,nohup命令雖然可以讓linux“放過”這個進程,但是nohup會同時把進程的控制台輸出重新導向到nohup.txt下(預設是這個檔案),當然可以重新導向為其他的檔案,但是輸出總會有的。

 

如果jboss運行很長時間,而且如果有很多控制台輸出的話,nohup.txt檔案就會變的很大很大。

 

通常項目中的日誌都會輸出到特定的記錄檔或者輸出到資料庫中,也就是說控制台的輸出對於程式的意義不大,那麼可不可以拋棄掉這些輸出呢。答案是肯定的。

 

這裡講解一下linux的重新導向(注意,是linux的重新導向,不是針對nohup)。

0、1和2分別表示標準輸入、標準輸出和標準錯誤資訊輸出,可以用來指定需要重新導向的標準輸入或輸出。

 

在一般使用時,預設的是標準輸出,既1.當我們需要特殊用途時,可以使用其他標號。例如,將某個程式的錯誤資訊輸出到log檔案中:./program 2>log。這樣標準輸出還是在螢幕上,但是錯誤資訊會輸出到log檔案中。

另外,也可以實現0,1,2之間的重新導向。2>&1:將錯誤資訊重新導向到標準輸出。

 

Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重新導向到它的資訊都會消失得無影無蹤。

 

結合nohup,我們可以這樣nohup  ./run.sh   >/dev/null   &

這是最簡單的一種方式,既保證了程式能夠一直後台執行,又能保證不會產生太大的nohup.txt檔案。

 

第二種方式就是利用的linux的一個機制,讓程式在subshell中執行,方法很簡單,將命令用括弧() 括起來即可。

 

ps -ef | grep test

可以看到run.sh的父進程為1,不是當前終端了,這樣就能忽略hung  up訊號。

 

當然linux還可以動態讓程式後台運行或不被hung  up 訊號關閉,例如disown命令,setid命令等。

 

可以參考這篇文章:http://www.cnblogs.com/xianghang123/archive/2011/08/02/2125511.html

 

下篇文章繼續講解linux的開機啟動機制。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.