在ssh、telnet斷開(kāi)之后繼續(xù)執(zhí)行程序_第1頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在ssh、telnet斷開(kāi)之后繼續(xù)執(zhí)行程序在ssh、 傳輸?shù)鹊?。通常狀況下我們都是為每一個(gè)這樣的任務(wù)開(kāi)一個(gè)遠(yuǎn)程終端窗口,由于他們執(zhí)行的時(shí)光太長(zhǎng)了。必需等待它執(zhí)行完畢,在此期間可不能關(guān)掉窗口或者斷開(kāi)銜接,否則這個(gè)任務(wù)就會(huì)被殺掉,一切半途而廢了。元兇:sighup 信號(hào)讓我們來(lái)看看為什么關(guān)掉窗口/斷開(kāi)銜接會(huì)使得正在運(yùn)行的程序死掉。在linux/unix中,有這樣幾個(gè)概念:進(jìn)程組(process group):一個(gè)或多個(gè)進(jìn)程的集合,每一個(gè)進(jìn)程組有唯一一個(gè)進(jìn)程組id,即進(jìn)程組進(jìn)步程的id。 會(huì)話期(session):一個(gè)或多個(gè)進(jìn)程組的集合,有唯一一個(gè)會(huì)話期首進(jìn)程(session leader)。會(huì)話期

2、id為首進(jìn)程的id。 會(huì)話期可以有一個(gè)單獨(dú)的控制終端(conolling teinal)。與控制終端銜接的會(huì)話期首進(jìn)程叫做控制進(jìn)程(controlling process)。當(dāng)前與終端交互的進(jìn)程稱為前臺(tái)進(jìn)程組。其余進(jìn)程組稱為后臺(tái)進(jìn)程組。 按照posix.1定義:掛斷信號(hào)(sighup)默認(rèn)的動(dòng)作是終止程序。 當(dāng)終端接口檢測(cè)到網(wǎng)絡(luò)銜接斷開(kāi),將掛斷信號(hào)發(fā)送給控制進(jìn)程(會(huì)話期首進(jìn)程)。 假如會(huì)話期首進(jìn)程終止,則該信號(hào)發(fā)送到該會(huì)話期前臺(tái)進(jìn)程組。 一個(gè)進(jìn)程退出導(dǎo)致一個(gè)孤兒進(jìn)程組中產(chǎn)生時(shí),假如隨意一個(gè)孤兒進(jìn)程組進(jìn)程處于stop狀態(tài),發(fā)送sighup和sigcont信號(hào)到該進(jìn)程組中全部進(jìn)程。 因此當(dāng)網(wǎng)絡(luò)斷開(kāi)

3、或終端窗口關(guān)閉后,控制進(jìn)程收到sighup信號(hào)退出,會(huì)導(dǎo)致該會(huì)話期內(nèi)其他進(jìn)程退出。我們來(lái)看一個(gè)例子。打開(kāi)兩個(gè)ssh終端窗口,在其中一個(gè)運(yùn)行top。roottivf09 root top在另一個(gè)終端窗口,找到top的進(jìn)程id為5180,其父進(jìn)程id為5128,即登錄shell。roottivf09 root ps -ef| top root 5180 5128 0 01:03 pts/0 00:00:02 top root 5857 3672 0 01:12 pts/2 00:00:00 grep top用法ps指令可以更清晰地看到這個(gè)關(guān)系:roottivf09 root pstree -h 5

4、180|grep top |-sshd-+-sshd-bash-top用法ps-xj指令可以看到,登錄shell(pid 5128)和top在同一個(gè)會(huì)話期,shell為會(huì)話期首進(jìn)程,所在進(jìn)程組pgid為5128,top所在進(jìn)程組pgid為5180,為前臺(tái)進(jìn)程組。roottivf09 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 gre

5、p 5128關(guān)閉第一個(gè)ssh窗口,在另一個(gè)窗口中可以看到top也被殺掉了。roottivf09 root ps -ef|grep 5128 root 18699 3672 0 04:35 pts/2 00:00:00 grep 5128-unix/linux下普通想讓某個(gè)程序在后臺(tái)運(yùn)行,無(wú)數(shù)都是用法 在程序結(jié)尾來(lái)讓程序自動(dòng)運(yùn)行。比如我們要運(yùn)行mysql在后臺(tái) /usr/local/mysql/bin/mysqld_safe user=mysql 但是我們無(wú)數(shù)程序并不象mysqld一樣可以做成守護(hù)進(jìn)程 ,可能我們的程序只是一般程序而已,普通這種程序即使用法 結(jié)尾,假如終端關(guān)閉,那么程序也會(huì)被關(guān)閉

6、。為了能夠后臺(tái)運(yùn)行,我們可以忽視sighup信號(hào),關(guān)掉窗口應(yīng)當(dāng)就不會(huì)影響程序的運(yùn)行了。nohup指令可以達(dá)到這個(gè)目的,假如程序的標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤是終端,nohup默認(rèn)將其重定向到nohup.out文件。值得注重的是nohup指令只是使得程序忽視sighup信號(hào),還需要用法標(biāo)志 把它放在后臺(tái)運(yùn)行。我們需要用法nohup這個(gè)指令,比如我們有個(gè)start.sh需要在后臺(tái)運(yùn)行,并且希翼在后臺(tái)能夠向來(lái)運(yùn)行,那么就用法nohup:語(yǔ)法格式為 nohup command argument. 如 nohup /root/start.sh 在shell中回車(chē)后提醒: $ appending output to

7、 nohup.out 原程序的的標(biāo)準(zhǔn)輸出被自動(dòng)改向到當(dāng)前名目下的nohup.out文件,起到了log的作用。 但是有時(shí)候在這一步會(huì)有問(wèn)題,當(dāng)把終端關(guān)閉后,進(jìn)程會(huì)自動(dòng)被關(guān)閉,察看nohup.out可以看到在關(guān)閉終端眨眼服務(wù)自動(dòng)關(guān)閉。 詢問(wèn)紅旗linux工程師后,他也不得其解,在我的終端上執(zhí)行后,他啟動(dòng)的進(jìn)程居然在關(guān)閉終端后依舊運(yùn)行。 在其次遍給我演示時(shí),我才發(fā)覺(jué)我和他操作終端時(shí)的一個(gè)詳情不同:他是在當(dāng)shell中提醒了nohup勝利后還需要按終端上鍵盤(pán)隨意鍵退回到 shell輸入指令窗口,然后通過(guò)在shell中輸入it來(lái)退出終端;而我是每次在nohup執(zhí)行勝利后挺直點(diǎn)關(guān)閉程序按鈕關(guān)閉終端.。所以

8、這時(shí)候會(huì)斷掉該指令所對(duì)應(yīng)的session,導(dǎo)致nohup對(duì)應(yīng)的進(jìn)程被通知需要一起shutdown。 這個(gè)詳情有人和我一樣沒(méi)注重到,所以在這兒記錄一下了。 附:nohup指令參考 nohup 指令 用途:不掛斷地運(yùn)行指令。語(yǔ)法:nohup command arg 描述:nohup 指令運(yùn)行由 command 參數(shù)和任何相關(guān)的 arg 參數(shù)指定的指令,忽視全部掛斷(sighup)信號(hào)。在注銷(xiāo)后用法 nohup 指令運(yùn)行后臺(tái)中的程序。要運(yùn)行后臺(tái)中的 nohup 指令,添加 ( 表示”and”的符號(hào))到指令的尾部。 無(wú)論是否將 nohup 指令的輸出重定向到終端,輸出都將附加到當(dāng)前名目的 nohup.

9、out 文件中。假如當(dāng)前名目的 nohup.out 文件不行寫(xiě),輸出重定向到 $home/nohup.out 文件中。假如沒(méi)有文件能創(chuàng)建或打開(kāi)以用于追加,那么 command 參數(shù)指定的指令不行調(diào)用。假如標(biāo)準(zhǔn)錯(cuò)誤是一個(gè)終端,那么把指定的指令寫(xiě)給標(biāo)準(zhǔn)錯(cuò)誤的全部輸出作為標(biāo)準(zhǔn)輸出重定向到相同的文件描述符。 退出狀態(tài):該指令返回下列出口值: 126 可以查找但不能調(diào)用 command 參數(shù)指定的指令。 127 nohup 指令發(fā)生錯(cuò)誤或不能查找由 command 參數(shù)指定的指令。 否則,nohup 指令的退出狀態(tài)是 command 參數(shù)指定指令的退出狀態(tài)。 nohup指令及其輸出文件 nohup指令:

10、假如你正在運(yùn)行一個(gè)進(jìn)程,而且你覺(jué)得在退出帳戶時(shí)該進(jìn)程還不會(huì)結(jié)束,那么可以用法nohup指令。該指令可以在你退出帳戶/關(guān)閉終端之后繼續(xù)運(yùn)行相應(yīng)的進(jìn)程。nohup就是不掛起的意思( n ohang up)。 該指令的普通形式為:nohup command 用法nohup指令提交作業(yè) 假如用法nohup指令提交作業(yè),那么在缺省狀況下該作業(yè)的全部輸出都被重定向到一個(gè)名為nohup.out的文件中,除非另外指定了輸出文件: nohup command myout. 2 1 在上面的例子中,輸出被重定向到myout.file文件中。 用法 jobs 查看任務(wù)。 用法 fg %n 關(guān)閉。 另外有兩個(gè)常用的f

11、tp 工具ftpget和put,可以實(shí)現(xiàn)后臺(tái)的ftp上傳和下載,這樣就可以利用這些指令在后臺(tái)上傳和下載文件了。- 雖然nohup很簡(jiǎn)單用法,但還是比較”簡(jiǎn)陋”的,對(duì)于容易的指令能夠?qū)Ω哆^(guò)來(lái),對(duì)于復(fù)雜的需要人機(jī)交互的任務(wù)就棘手了。其實(shí)我們可以用法一個(gè)更為強(qiáng)大的有用程序screen。流行的linux發(fā)行版(例如r hat enterprise linux 4)通常會(huì)自帶screen有用程序,假如沒(méi)有的話,可以從gnu screen的官方網(wǎng)站下載。roottivf06 rpm -qa|grep screen xscreensaver-4.18-5.rhel4.11 screen-4.0.2-5開(kāi)頭用

12、法screen容易來(lái)說(shuō),screen是一個(gè)可以在多個(gè)進(jìn)程之間多路復(fù)用一個(gè)物理終端的窗口管理器。screen中有會(huì)話的概念,用戶可以在一個(gè)screen會(huì)話中創(chuàng)建多個(gè)screen窗口,在每一個(gè)screen窗口中就像操作一個(gè)真切的telnet/ssh銜接窗口那樣。在screen中創(chuàng)建一個(gè)新的窗口有這樣幾種方式:1挺直在指令行鍵入screen指令roottivf06 screenscreen將創(chuàng)建一個(gè)執(zhí)行shell的全屏窗口。你可以執(zhí)行隨意shell程序,就像在ssh窗口中那樣。在該窗口中鍵入exit退出該窗口,假如這是該screen會(huì)話的唯一窗口,該screen會(huì)話退出,否則screen自動(dòng)切換到前

13、一個(gè)窗口。2screen指令后跟你要執(zhí)行的程序。roottivf06 screen vi test.cscreen創(chuàng)建一個(gè)執(zhí)行vi test.c的單窗口會(huì)話,退出vi將退出該窗口/會(huì)話。3以上兩種方式都創(chuàng)建新的screen會(huì)話。我們還可以在一個(gè)已有screen會(huì)話中創(chuàng)建新的窗口。在當(dāng)前screen窗口中鍵入c-a c ,即ctrl鍵+a鍵,之后再按下c鍵,screen 在該會(huì)話內(nèi)生成一個(gè)新的窗口并切換到該窗口。screen還有更高級(jí)的功能。你可以不中斷screen窗口中程序的運(yùn)行而臨時(shí)斷開(kāi)(detach)screen會(huì)話,并在隨后時(shí)光重新銜接(attach)該會(huì)話,重新控制各窗口中運(yùn)行的程序。

14、例如,我們打開(kāi)一個(gè)screen窗口編輯/tmp/abc文件:roottivf06 screen vi /tmp/abc之后我們想臨時(shí)退出做點(diǎn)別的事情,比如出去散漫步,那么在screen窗口鍵入c-a d (挺直斷開(kāi)銜接也可以的),screen會(huì)給出detached提醒:臨時(shí)中斷會(huì)話 半個(gè)小時(shí)之后回歸了,找到該screen會(huì)話:roottivf06 screen - there is a screen on: 16582.pts-1.tivf06 (detached) 1 socket in /tmp/screens/s-root.重新銜接會(huì)話:roottivf06 screen -r 1658

15、2看看浮現(xiàn)什么了,太棒了,一切都在。繼續(xù)干吧。你可能注重到給screen發(fā)送指令用法了特別的鍵組合c-a。這是由于我們?cè)阪I盤(pán)上鍵入的信息是挺直發(fā)送給當(dāng)前screen窗口,必需用其他方式向screen窗口管理器發(fā)出指令,默認(rèn)狀況下,screen接收以c-a開(kāi)頭的指令。這種指令形式在screen中叫做鍵綁定(key binding),c-a叫做指令字符(command character)??梢酝ㄟ^(guò)c-a ? 來(lái)查看全部的鍵綁定,常用的鍵綁定有:c-a ? 顯示全部鍵綁定信息 c-a w 顯示全部窗口列表 c-a c-a 切換到之前顯示的窗口 c-a c 創(chuàng)建一個(gè)新的運(yùn)行shell的窗口并切換到該

16、窗口 c-a n 切換到下一個(gè)窗口 c-a p 切換到前一個(gè)窗口(與c-a n相對(duì)) c-a 0.9 切換到窗口0.9 c-a a 發(fā)送 c-a到當(dāng)前窗口 c-a d 臨時(shí)斷開(kāi)screen會(huì)話 c-a k 殺掉當(dāng)前窗口 c-a 進(jìn)入拷貝/回滾模式screen常用選項(xiàng)用法鍵綁定c-a ?指令可以看到, 默認(rèn)的指令字符(command key)為c-a,轉(zhuǎn)義c-a(literal a)的字符為a:screen 常用選項(xiàng) 由于screen把c-a看作是screen指令的開(kāi)頭,所以假如你想要screen窗口接收到c-a字符,就要輸入c-a a。screen也允許你用法-e選項(xiàng)設(shè)置自己的指令字符和轉(zhuǎn)義字

17、符,其格式為:-exy x為指令字符,y為轉(zhuǎn)義指令字符的字符下面指令啟動(dòng)的screen會(huì)話指定了指令字符為c-t,轉(zhuǎn)義c-t的字符為t,通過(guò)c-t ?指令可以看到該變幻。自定義指令字符和轉(zhuǎn)義字符 roottivf18 root screen -ett其他常用的指令選項(xiàng)有:-c file 用法配置文件file,而不用法默認(rèn)的$home/.screenrc -d|-d p.tty.host 不開(kāi)啟新的screen會(huì)話,而是斷開(kāi)其他正在運(yùn)行的screen會(huì)話 -h num 指定歷史回滾緩沖區(qū)大小為num行 -list|-ls 列浮現(xiàn)有screen會(huì)話,格式為pid.tty.host -d -m 啟動(dòng)

18、一個(gè)開(kāi)頭就處于斷開(kāi)模式的會(huì)話 -r sessionowner/ pid.tty.host 重新銜接一個(gè)斷開(kāi)的會(huì)話。多用戶模式下銜接到其他用戶screen會(huì)話需要指定sessionowner,需要uid-root權(quán)限 -s sessionname 創(chuàng)建screen會(huì)話時(shí)為會(huì)話指定一個(gè)名字 -v 顯示screen版本信息 -wipe match 同-list,但刪掉那些無(wú)法銜接的會(huì)話下例顯示當(dāng)前有兩個(gè)處于detached狀態(tài)的screen會(huì)話,你可以用法screen -r screen_pid 重新銜接上:roottivf18 root screen -ls there are screens on: 8736.pts-1.tivf18 (detached) 8462.pts-0.tivf18 (detached) 2 sockets i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論