背景 :工作需要,需要遠(yuǎn)程控制主機(jī)使其斷開Xshell后也能一直運行。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、安多網(wǎng)絡(luò)推廣、成都小程序開發(fā)、安多網(wǎng)絡(luò)營銷、安多企業(yè)策劃、安多品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供安多建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
關(guān)鍵字 : ,nohup,腳本掛起。
在應(yīng)用Unix/Linux時,我們一般想讓某個程序在后臺運行,于是我們將常會用 在程序結(jié)尾來讓程序自動運行。
鍵入Ctrl + C,發(fā)出SIGINT信號,程序會繼續(xù)運行
方法一、輸入命令:jobs
方法二:輸入命令:ps
fg、bg、jobs、、nohup、ctrl+z、ctrl+c 命令
加在一個命令的最后,可以把這個命令放到后臺執(zhí)行,如
可以將一個正在前臺執(zhí)行的命令放到后臺,并且處于暫停狀態(tài)。
查看當(dāng)前有多少在后臺運行的命令
jobs -l選項可顯示所有任務(wù)的PID,jobs的狀態(tài)可以是running, stopped, Terminated。但是如果任務(wù)被終止了(kill),shell 從當(dāng)前的shell環(huán)境已知的列表中刪除任務(wù)的進(jìn)程標(biāo)識。
將后臺中的命令調(diào)至前臺繼續(xù)運行。如果后臺中有多個命令,可以用fg %jobnumber(是命令編號,不是進(jìn)程號)將選中的命令調(diào)出。
將一個在后臺暫停的命令,變成在后臺繼續(xù)執(zhí)行。如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調(diào)出。
法子1:通過jobs命令查看job號(假設(shè)為num),然后執(zhí)行kill %num
法子2:通過ps命令查看job的進(jìn)程號(PID,假設(shè)為pid),然后執(zhí)行kill pid
前臺進(jìn)程的終止:Ctrl+c
如果讓程序始終在后臺執(zhí)行,即使關(guān)閉當(dāng)前的終端也執(zhí)行(之前的做不到),這時候需要nohup。該命令可以在你退出帳戶/關(guān)閉終端之后繼續(xù)運行相應(yīng)的進(jìn)程。
關(guān)閉中斷后,在另一個終端jobs已經(jīng)無法看到后臺跑得程序了,此時利用ps(進(jìn)程查看命令)
如上所示:
nohup 和 組合了后臺運行程序。
可以輸出到 out.log保存程序輸出,也可以輸出到/dev/null 即空設(shè)備,不保存輸出。
上面三種方式無論在nohup.out 或test.out都看不到數(shù)據(jù)結(jié)果,這是因為python執(zhí)行有緩存輸出
解決
新的接口接入查看程序
使用后臺運行程序:
結(jié)果會輸出到終端
使用Ctrl + C發(fā)送SIGINT信號, 程序免疫
關(guān)閉session發(fā)送SIGHUP信號, 程序關(guān)閉
使用nohup運行程序:
結(jié)果默認(rèn)會輸出到nohup.out
使用Ctrl + C發(fā)送SIGINT信號, 程序關(guān)閉
關(guān)閉session發(fā)送SIGHUP信號, 程序免疫
平日線上經(jīng)常使用nohup和配合來啟動程序:
同時免疫SIGINT和SIGHUP信號
同時,還有一個最佳實踐:
不要將信息輸出到終端標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯誤輸出,而要用日志組件將信息記錄到日志里
nohup和究竟有啥區(qū)別
命令運行時使用CTRL+Z,強(qiáng)制當(dāng)前進(jìn)程轉(zhuǎn)為后臺,并使之掛起(暫停).\x0d\x0a1. 使進(jìn)程恢復(fù)運行(后臺)\x0d\x0a(1)使用命令bg\x0d\x0aExample:\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01\x0d\x0a*這里使用CTRL+Z,此時serv01是停止?fàn)顟B(tài)*\x0d\x0a[1]+ Stopped ./tcpserv01\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ bg\x0d\x0a[1]+ ./tcpserv01 *此時serv01運行在后臺*\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$\x0d\x0a(2)如果用CTRL+Z停止了幾個程序呢?\x0d\x0aExample:\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ jobs\x0d\x0a[1]- Running ./tcpserv01 \x0d\x0a[2]+ Stopped ./tcpcli01 127.0.0.1\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ bg %1\x0d\x0abash: bg:任務(wù) 1 已轉(zhuǎn)入后臺 *后臺運行*\x0d\x0a2. 使進(jìn)程恢復(fù)至前臺運行\(zhòng)x0d\x0aExample:\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04\x0d\x0a[1]+ Stopped ./tcpserv04\x0d\x0azuii@zuii-desktop:~/unp/tcpcliserv$ fg\x0d\x0a./tcpserv04\x0d\x0a總結(jié):\x0d\x0a(1) CTRL+Z掛起進(jìn)程并放入后臺\x0d\x0a(2) jobs 顯示當(dāng)前暫停的進(jìn)程\x0d\x0a(3) bg %N 使第N個任務(wù)在后臺運行(%前有空格)\x0d\x0a(4) fg %N 使第N個任務(wù)在前臺運行\(zhòng)x0d\x0a默認(rèn)bg,fg不帶%N時表示對最后一個進(jìn)程操作!
Linux手工啟動進(jìn)程
手工啟動進(jìn)程指的是由用戶輸入命令直接啟動一個進(jìn)程,根據(jù)所啟動的進(jìn)程類型和性質(zhì)不同,又細(xì)分為前臺啟動和后臺啟動兩種。
前臺啟動進(jìn)程
這是手工啟動進(jìn)程最常用的方式,因為當(dāng)時輸入一個命令并運行,就已經(jīng)啟動了一個進(jìn)程,而且是一個前臺的進(jìn)程,此時系統(tǒng)其實已經(jīng)處于一個多進(jìn)程的狀態(tài),一個是shell進(jìn)程,另一個是新啟動的進(jìn)程。
實際上,系統(tǒng)自動時就有許多進(jìn)程悄悄地在后臺運行,不過為了方便閱讀,并沒有將這些進(jìn)程包括在內(nèi)。
假如啟動一個比較耗時的進(jìn)程,然后再把該進(jìn)程掛起,并使用ps命令查看,就會看到該進(jìn)程在PS顯示列表中。將進(jìn)程掛起,指的是將前臺運行的進(jìn)程放到后臺,并且暫停其運行。
后臺啟動進(jìn)程
進(jìn)程直接從后臺運行,用的相對比較少,除非該進(jìn)程非常耗時,且用戶也不急著需要其運行結(jié)果的時候,例如,用戶需要啟動一個需要長時間運行的格式化文本文件的進(jìn)程,為了不使整個shell在格式化過程中都處于被占用狀態(tài),從后臺啟動這個進(jìn)程是比較明智的選擇。
從后臺啟動進(jìn)程,其實就是在命令結(jié)尾處添加一個符號。輸入命令并運行之后,shell會提供給我們一個數(shù)字,此數(shù)字就是該進(jìn)程的進(jìn)程號。然后直接就會出現(xiàn)提示符,用戶就可以繼續(xù)完成其他工作。
手工啟動的2種方式,實際上它們有個共同的特點,就是新進(jìn)程都是由當(dāng)前shell這個進(jìn)程產(chǎn)生的,換句話說,是shell創(chuàng)建了新進(jìn)程,于是稱這種關(guān)系為進(jìn)程間的父子關(guān)系,其中shell是父進(jìn)程,新進(jìn)程是子進(jìn)程。
且一個父進(jìn)程可以有多個子進(jìn)程,通常子進(jìn)程結(jié)束后才能繼續(xù)父進(jìn)程;當(dāng)然,如果是從后臺啟動,父進(jìn)程就不用等待子進(jìn)程了。
Linux調(diào)度啟動進(jìn)程
在Linux系統(tǒng)中,任務(wù)可以被配置在指定的時間、日期或者系統(tǒng)平均負(fù)載量低于指定值時自動啟動。
例如,Linux預(yù)配置了重要系統(tǒng)任務(wù)的運行,以便可以使系統(tǒng)能夠?qū)崟r被更新,系統(tǒng)管理員也可以使用自動化的任務(wù)來定期對重要數(shù)據(jù)進(jìn)行備份。
實現(xiàn)調(diào)度啟動進(jìn)程的方法有很多,比如通過crontab、cat等命令。