Linux命令nohup+screen

來源:互聯網
上載者:User

 

如果想在關閉ssh串連後剛才啟動的程式繼續運行怎麼辦,可以使用nohup。但是如果要求第二天來的時候,一開ssh,還能查看到昨天啟動並執行程式的狀態,然後繼續工作,這時nohup是不行了,需要使用screen來達到這個目的。

 

nohup命令可以用來執行其他命令,並且忽略SIGHUP訊號(run a command immune to hangups, with output to a non-tty。Run COMMAND, ignoring hangup signals.)當一個虛擬終端的網路連接斷開時,作業系統向正在啟動並執行程式發送SIGHUP訊號(HUP = HangUP、掛斷),預設情況下這個訊號將使程式退出。

 一 nohup

 

問題1為什麼ssh一關閉,程式就不再運行了?元兇:SIGHUP 訊號 讓我們來看看為什麼關掉視窗/中斷連線會使得正在啟動並執行程式死掉。

 

在Linux/Unix中,有這樣幾個概念:進程組(process group):一個或多個進程的集合,每一個進程組有唯一一個進程組ID,即進程組長進程的ID。會話期(session):一個或多個進程組的集合,有唯一一個會話期首進程(session leader)。會話期ID為首進程的ID。會話期可以有一個單獨的控制終端(controlling terminal)。與控制終端串連的會話期首進程叫做控制進程(controlling process)。當前與終端互動的進程稱為前台進程組。其餘進程組稱為後台進程組。根據POSIX.1定義:掛斷訊號(SIGHUP)預設的動作是終止程式。當終端介面檢測到網路連接斷開,將掛斷訊號發送給控制進程(會話期首進程)。如果會話期首進程終止,則該訊號發送到該會話期前台進程組。一個進程退出導致一個孤兒進程組中產生時,如果任意一個孤兒進程組進程處於STOP狀態,發送SIGHUP和SIGCONT訊號到該進程組中所有進程。結論:因此當網路斷開或終端視窗關閉後,也就是SSH斷開以後,控制進程收到SIGHUP訊號退出,會導致該會話期內其他進程退出。 簡而言之:就是ssh 開啟以後,bash等都是他的子程式,一旦ssh關閉,系統將所有相關進程殺掉!! 導致一旦ssh關閉,執行中的任務就取消了  例子:我們來看一個例子。開啟兩個SSH終端視窗,在其中一個運行top命令。[root@tivf09 root]# top 在另一個終端視窗,找到top的進程ID為5180,其父進程ID為5128,即登入shell。[root@tivf09 root]# ps -ef|grep toproot      5180  5128  0 01:03 pts/0    00:00:02 toproot      5857  3672  0 01:12 pts/2    00:00:00 grep top 使用pstree命令可以更清楚地看到這個關係:[root@tivf09 root]# pstree -H 5180|grep top|-sshd-+-sshd---bash---top            使用ps-xj命令可以看到,登入shell(PID 5128)和top在同一個會話期,shell為會話期首進程,所在進程組PGID為5128,top所在進程組PGID為5180,為前台進程組。[root@tivf09 root]# ps -xj|grep 5128 5126  5128  5128  5128 pts/0     5180 S        0   0:00 -bash 5128  5180  5180  5128 pts/0     5180 S        0   0:50 top 3672 18095 18094  3672 pts/2    18094 S        0   0:00 grep 5128 關閉第一個SSH視窗,在另一個視窗中可以看到top也被殺掉了。[root@tivf09 root]# ps -ef|grep 5128root     18699  3672  0 04:35 pts/2    00:00:00 grep 5128 問題2   為什麼精靈就算ssh 開啟的,就算關閉ssh也不會影響其運行? 因為他們的程式特殊,比如httpd –k start運行這個以後,他不屬於sshd這個進程組  而是單獨的進程組,所以就算關閉了ssh,和他也沒有任何關係! [root@CentOS5-4 ~]# pstree |grep http     |-httpd[root@CentOS5-4 ~]# pstree |grep top     |-sshd-+-sshd---bash---top  結論:守護進程的啟動命令本身就是特殊的,和一般命令不同的,比如mysqld_safe 這樣的命令 一旦使用了  就是守護進程運行。所以想把一般程式改造為精靈是不可能, 問題3 使用後台運行命令&  能否將程式擺脫ssh進程組控制呢  也就是ssh關閉,背景程式繼續運行? 我們做一個實驗:  find / -name ‘*http*’ &利用ctrl+d 登出以後 再進入系統  會不會看見這個命令再運行?答案是  :命令被中止了!! 因為他依然屬於這個ssh進程組 就算加了&也無法擺脫!![root@CentOS5-4 ~]# pstree |grep find     |-sshd-+-sshd---bash---find 結論就是:只要是ssh 開啟執行的一般命令,不是精靈,無論加不加&,一旦關閉ssh,系統就會用SIGHUP終止 問題4  nohup能解決的問題但是為了能夠再登出以後 依然能後台運行,那麼我們就可以使用nohup這個命令,我們現在開始尋找find / -name ‘*http*’ &,並且希望在後台運行,那麼就使用nohup:nohup find / -name "*httpd*"此時預設地程式啟動並執行輸出資訊放到當前檔案夾的 nohup.out 檔案中去加不加&並不會影響這個命令   只是讓程式 前台或者後台運行而已  二 screen

 

雖然nohup很容易使用,但還是比較“簡陋”的,對於簡單的命令能夠應付過來,對於複雜的需要人機互動的任務就麻煩了。其實我們可以使用一個更為強大的公用程式screen。流行的Linux發行版(例如Red Hat Enterprise Linux 4)通常會內建screen公用程式,如果沒有的話,可以從GNU screen的官方網站下載。

 

 1)使用執行screen , 按任意鍵進入子介面;我用ping命令開始執行,如果下班了,但是想關閉ssh以後ping繼續運行,那麼按ctrl+a   再按d   這樣暫停了子介面,會顯示[detached]的字樣,這時候 我回到了父介面;用screen –ls查看目前子介面的狀態 screen -lsThere is a screen on: 22292.pts-3.free (Detached)1 Socket in /tmp/screens/S-root,這裡的22292其實是子介面的pid號; 如果回到子介面 用screen –r 22292,一下子彈到了ping 的子介面; 2)更多協助 可以通過C-a(ctrl+a) ?來查看所有的鍵綁定,常用的鍵綁定有: C-a ?顯示所有鍵綁定資訊C-a w顯示所有視窗列表C-a C-a切換到之前顯示的視窗C-a c建立一個新的運行shell的視窗並切換到該視窗C-a n切換到下一個視窗C-a p切換到前一個視窗(與C-a n相對)C-a 0..9切換到視窗0..9C-a a發送 C-a到當前視窗C-a d暫時斷開screen會話C-a k殺掉當前視窗C-a [進入拷貝/復原模式 其他常用選項: -c file使用設定檔file,而不使用預設的$HOME/.screenrc-d|-D [pid.tty.host]不開啟新的screen會話,而是斷開其他正在啟動並執行screen會話-h num指定曆史復原緩衝區大小為num行-list|-ls列出現有screen會話,格式為pid.tty.host-d -m啟動一個開始就處於斷開模式的會話-r sessionowner/ [pid.tty.host]重新串連一個斷開的會話。多使用者模式下串連到其他使用者screen會話需要指定sessionowner,需要setuid-root許可權-S sessionname建立screen會話時為會話指定一個名字-v顯示screen版本資訊-wipe [match]同-list,但刪掉那些無法串連的會話    參考:http://chlotte.blog.51cto.com/318402/556540 完!   

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.