nohup · VS · screen

 

說到在Linux系統上後臺運行任務,可能很多人的第一反應是 nohup命令,可能還會有人提到 screen 命令。今天老張就給大家介紹這兩個命令,相信看完老張的介紹,大家可以根據實際情況靈活選擇使用二者。

 

01 nohup

 

先來看一下nohup的幫助文檔:

root@ubuntu:~# nohup --help
Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

      --help     display this help and exit
      --version  output version information and exit

If standard input is a terminal, redirect it from an unreadable file.
If standard output is a terminal, append output to 'nohup.out' if possible,
'$HOME/nohup.out' otherwise.
If standard error is a terminal, redirect it to standard output.
To save output to FILE, use 'nohup COMMAND > FILE'.

nohup相對比較簡單,幫助文檔說的也比較明白。但是實際使用中往往需要配合一些其他的linux特性。

 

搭配“&”後臺運行

使用nohup啓動的程序會忽略hangup信號,hangup只是終止信號的一種,但是在關閉終端時,還會有其他的終止的信號,所以這時候往往需要配合 & 一起使用,這樣就可以做到不管是我們主動或者意外斷開終端,程序依然能夠繼續運行。

root@ubuntu:~# nohup COMMAND &

 

搭配“>”、“<”重定向輸入輸出

因爲nohup在缺省狀態下會將原本輸出到控制檯的stdout和stderr重定向至執行目錄下的nohup.out文件,在特殊需求的情況下需要配合linux的文件重定向自定義輸入輸出文件。下面的實例將標準輸入(0)、標準輸出(1)、標準錯誤(2)分別重定向至my.in、my.out、my.err。

root@ubuntu:~# nphup COMMDAND 0 < my.in 1 > my.out 2 > my.err

 

 

02 screen

 

比起nohup,screen要複雜的多,我們先來看一下screen官方給出的簡介。

屏幕是一個全屏窗口管理器,它在多個進程(通常是交互式外殼程序)之間多路複用物理終端。

 …… 

當screen被調用的時候,它會創建一個帶有SHELL的窗口,你可以像平時操作SHELL一樣的運行你的進程。你可以隨時創建運行其他進程的窗口,殺死當前窗口,查看活動窗口的列表,打開和關閉輸出日誌記錄,在窗口裏面查看回滾歷史記錄,在窗口之間切換等。所有的窗口之間都是相互獨立的。即使斷開screen會話,進程依然能夠在後臺運行。

……

 

安裝screen

雖然使用screen需要用戶自己安裝,但是screen安裝相對簡單。

 

CentOS用戶可以使用yum安裝:

root@centos:~# yum install screen

Ubuntu用戶可以使用apt安裝:

root@ubuntu:~# apt install screen

 

screen的用法


screen [-AmRvx -ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s <shell>][-S <作業名稱>]

-A  將所有的視窗都調整爲目前終端機的大小。
-d<作業名稱>  將指定的screen作業離線。
-h<行數>  指定視窗的緩衝區行數。
-m  即使目前已在作業中的screen作業,仍強制建立新的screen作業。
-r<作業名稱>  恢復離線的screen作業。
-R  先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
-s<shell>  指定建立新視窗時,所要執行的shell。
-S<作業名稱>  指定screen作業的名稱。
-v  顯示版本信息。
-x  恢復之前離線的screen作業。
-ls或--list  顯示目前所有的screen作業。
-wipe  檢查目前所有的screen作業,並刪除已經無法使用的screen作業。

-r 搭配 -S 可以非常方便的複用如數據庫查詢之類的某些需要打開的SHELL操作。

 

screen的快捷鍵

比起退出VIM來說,退出screen的難度恐怕也不遑多讓。進入screen窗口後,雖然感覺是操作與普通終端無異,但是screen本身也有許多快捷鍵,而這些快捷鍵都需要搭配Ctrl+a。

ctrl a ctrl a,  最近使用的兩個窗口之間切換ctrl a + 數字,  切換到某個窗口ctrl a + d,     detachctrl a + k,     關閉當前窗口ctrl a + :,     進入命令行模式ctrl a C,       清空窗口數據ctrl a + A,     修改當前窗口的名稱

以退出當前窗口爲例,需要先按下Ctrl+a,鬆開之後快速按d。更多的快捷鍵可以查閱官方文檔:

http://www.gnu.org/software/screen/manual/screen.html#Default-Key-Bindings

 

03 nohup VS screen

 

  nohup screen
開箱即用,無需安裝
易用性
 
支持窗口輸入、輸出
退出終端,進程繼續運行 可以,但是需要配合& 可以
適用場景 單次運行、耗時很久的進程 除了支持後臺運行外,正常的終端操作也可以使用screen完成。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章