天天看點

linux-nohup背景運作

先說一下linux重定向:

0:标準輸入

1:标準輸出

2:标準錯誤資訊輸出

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

另外,也可以實作0,1,2之間的重定向。

2>&1:将錯誤資訊重定向到标準輸出。

前台運作程式時,該程式會一直占用着終端如果有螢幕輸出的話螢幕會一直列印,這時候我們讓程式背景運作(可能會一直列印,但不會占用終端),在程式運作指令最後加上 【&].

使用&背景運作程式:

  • 結果會輸出到終端
  • 使用Ctrl + C發送SIGINT信号,程式免疫
  • 關閉session發送SIGHUP信号,程式關閉

使用nohup運作程式:

  • 結果預設會輸出到nohup.out
  • 使用Ctrl + C發送SIGINT信号,程式關閉
  • 關閉session發送SIGHUP信号,程式免疫

平日線上經常使用nohup和&配合來啟動程式:

  • 同時免疫SIGINT和SIGHUP信号

同時,還有一個最佳實踐:

  • 不要将資訊輸出到終端标準輸出,标準錯誤輸出,而要用日志元件将資訊記錄到日志裡

 【nohup】+【&】這樣程式就可以在背景運作且關閉視窗也對其沒有影響

Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重定向到它的資訊都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以将輸出重定向到/dev/null。将所有輸出重定向到【/dev/null】這個‘空’裝置檔案,它會丢棄寫入的内容,就感覺任何東西都被“宇宙黑洞”吞噬了一樣。

1.如果想要正常輸出和錯誤資訊都不顯示,則要把标準輸出和标準錯誤都重定向到/dev/null

ls 1>/dev/null 2>/dev/null      

2. 将錯誤重定向到标準輸出,然後再重定向到 /dev/null

ls >/dev/null 2>&1      

注意:此處的順序不能更改,否則達不到想要的效果,此時先将标準輸出重定向到 /dev/null,然後将标準錯誤重定向到标準輸出,由于标準輸出已經重定向到了/dev/null,是以标準錯誤也會重定向到/dev/null,于是一切靜悄悄

由于使用nohup時,會自動将輸出寫入nohup.out檔案中,如果檔案很大的話,nohup.out就會不停的增大,這是我們不希望看到的,是以,可以利用/dev/null來解決這個問題。

a) 将标準輸出重定向到 /dev/null,然後将标準錯誤重定向log檔案

nohup ./program >/dev/null 2>log &  #将program的錯誤資訊輸出到log檔案,其他資訊丢進/dev/null      

b) 将标準錯誤重定向到标準輸出,由于标準輸出已經重定向到了/dev/null

nohup ./program >/dev/null 2>&1 &   #将program的錯誤資訊重定向到标準輸出,其他資訊丢進/dev/null      
ls 1>/dev/null 2>/dev/null      
ls >/dev/null 2>&1      
nohup ./program >/dev/null 2>log &  #将program的錯誤資訊輸出到log檔案,其他資訊丢進/dev/null      
nohup ./program >/dev/null 2>&1 &   #将program的錯誤資訊重定向到标準輸出,其他資訊丢進/dev/null      

繼續閱讀