linux常用命令bg linux常用命令在哪個目錄
Linux系統的進程調度
Linux進程調度
創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的淄川網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
1.調度方式
Linux系統的調度方式基本上采用“ 搶占式優先級 ”方式,當進程在用戶模式下運行時,不管它是否自愿,核心在一定條件下(如該進程的時間片用完或等待I/O)可以暫時中止其運行,而調度其他進程運行。一旦進程切換到內核模式下運行時,就不受以上限制,而一直運行下去,僅在重新回到用戶模式之前才會發生進程調度。
Linux系統中的調度基本上繼承了UNIX系統的 以優先級為基礎 的調度。也就是說,核心為系統中每個進程計算出一個優先級,該優先級反映了一個進程獲得CPU使用權的資格,即高優先級的進程優先得到運行。核心從進程就緒隊列中挑選一個優先級最高的進程,為其分配一個CPU時間片,令其投入運行。在運行過程中,當前進程的優先級隨時間遞減,這樣就實現了“負反饋”作用,即經過一段時間之后,原來級別較低的進程就相對“提升”了級別,從而有機會得到運行。當所有進程的優先級都變為0(最低)時,就重新計算一次所有進程的優先級。
2.調度策略
Linux系統針對不同類別的進程提供了3種不同的調度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合于 短實時進程 ,它們對時間性要求比較強,而每次運行所需的時間比較短。一旦這種進程被調度且開始運行,就一直運行到自愿讓出CPU或被優先級更高的進程搶占其執行權為止。
SCHED_RR對應“時間片輪轉法”,適合于每次運行需要 較長時間的實時進程 。一個運行進程分配一個時間片(200 ms),當時間片用完后,CPU被另外進程搶占,而該進程被送回相同優先級隊列的末尾,核心動態調整用戶態進程的優先級。這樣,一個進程從創建到完成任務后終止,需要經歷多次反饋循環。當進程再次被調度運行時,它就從上次斷點處開始繼續執行。
SCHED_OTHER是傳統的UNIX調度策略,適合于交互式的 分時進程 。這類進程的優先級取決于兩個因素:一個是進程剩余時間配額,如果進程用完了配給的時間,則相應優先級降到0;另一個是進程的優先數nice,這是從UNIX系統沿襲下來的方法,優先數越小,其優先級越高。nice的取值范圍是-20 19。用戶可以利用nice命令設定進程的nice值。但一般用戶只能設定正值,從而主動降低其優先級;只有特權用戶才能把nice的值設置為負數。進程的優先級就是以上二者之和。
后臺命令對應后臺進程(又稱后臺作業)。后臺進程的優先級低于任何交互(前臺)進程的優先級。所以,只有當系統中當前不存在可運行的交互進程時,才調度后臺進程運行。后臺進程往往按批處理方式調度運行。
3.調度時機
核心進行進程調度的時機有以下5種情況:
(1)當前進程調用系統調用nanosleep( )或者pause( ),使自己進入睡眠狀態,主動讓出一段時間的CPU的使用權。
(2)進程終止,永久地放棄對CPU的使用。
(3)在時鐘中斷處理程序執行過程中,發現當前進程連續運行的時間過長。
(4)當喚醒一個睡眠進程時,發現被喚醒的進程比當前進程更有資格運行。
(5)一個進程通過執行系統調用來改變調度策略或者降低自身的優先級(如nice命令),從而引起立即調度。
4.調度算法
進程調度的算法應該比較簡單,以便減少頻繁調度時的系統開銷。Linux執行進程調度時,首先查找所有在就緒隊列中的進程,從中選出優先級最高且在內存的一個進程。如果隊列中有實時進程,那么實時進程將優先運行。如果最需要運行的進程不是當前進程,那么當前進程就被掛起,并且保存它的現場—— 所涉及的一切機器狀態,包括程序計數器和CPU寄存器等,然后為選中的進程恢復運行現場。
(二)Linux常用調度命令
· nohup命令
nohup命令的功能是以忽略掛起和退出的方式執行指定的命令。其命令格式是:
nohup command [arguments]
其中,command是所要執行的命令,arguments是指定命令的參數。
nohup命令告訴系統,command所代表的命令在執行過程中不受任何結束運行的信號(hangup和quit)的影響。例如,
$ nohup find / -name exam.txt -printf1
find命令在后臺運行。在用戶注銷后,它會繼續運行:從根目錄開始,查找名字是exam.txt的文件,結果被定向到文件f1中。
如果用戶沒有對輸出進行重定向,則輸出被附加到當前目錄的nohup.out文件中。如果用戶在當前目錄中不具備寫權限,則輸出被定向到$HOME/nohup.out 中。
· at命令
at命令允許指定命令執行的時間。at命令的常用形式是:
at time command
其中,time是指定命令command在將來執行時的時間和日期。時間的指定方法有多種,用戶可以使用絕對時間,也可以用相對時間。該指定命令將以作業形式在后臺運行。例如:
$ at 15:00 Oct 20
回車后進入接收方式,接著鍵入以下命令:
mail -s "Happy Birthday!" liuzheny
按下D鍵,屏幕顯示:
job 862960800.a at Wed Oct 20 15:00:00 CST 1999
$
表明建立了一個作業,其作業ID號是862960800.a,運行作業的時間是1999年10月20日下午3:00,給liuzheny發一條標題為“Happy Birthday!”(生日快樂)的空白郵件。
利用 at -l 可以列出當前at隊列中所有的作業。
利用 at -r 可以刪除指定的作業。這些作業以前由at或batch命令調度。例如,
at -r 862960797.a
將刪除作業ID號是862960797.a的作業。其一般使用形式是:
at -r job_id
注意,結尾是.a的作業ID號,表示這個作業是由at命令提交的;結尾是.b的作業ID號,表示這個作業是由batch命令提交的。
· batch命令
batch命令不帶任何參數,它提交的作業的優先級比at命令提交的作業的優先級低。batch無法指定作業運行的時間。實際運行時間要看系統中已經提交的作業數量。如果系統中優先級較高的作業比較多,那么,batch提交的作業則需要等待;如果系統空閑,則運行batch提交的作業。例如,
$ batch
回車后進入接收方式,接著鍵入命令:
find / -name exam.txt -print
按下D。退出接收方式,屏幕顯示:
job 862961540.b at Thu Nov 18 14:30:00 CST 1999
表示find命令被batch作為一個作業提交給系統,作業ID號是862961540.b。如果系統當前空閑,這個作業被立即執行,其結果同樣作為郵件發送給用戶。
· jobs命令
jobs命令用來顯示當前shell下正在運行哪些作業(即后臺作業)。例如:
$ jobs
[2] + Running tar tv3 *
[1] - Running find / -name README -print logfile
$
其中,第一列方括號中的數字表示作業序號,它是由當前運行的shell分配的,而不是由操作系統統一分配的。在當前shell環境下,第一個后臺作業的作業號為1,第二個作業的作業號為2,等等。
第二列中的“ ”號表示相應作業的優先級比“-”號對應作業的優先級高。
第三列表明作業狀態,是否為運行、中斷、等待輸入或停止等。
最后列出的是創建當前這個作業所對應的命令行。
利用 jobs -l 形式,可以在作業號后顯示出相應進程的PID。如果想只顯示相應進程的PID,不顯示其它信息,則使用 jobs -p 形式。
· fg命令
fg命令把指定的后臺作業移到前臺。其使用格式是:
fg [job…]
其中,參數job是一個或多個進程的PID,或者是命令名稱或者作業號(前面要帶有一個“%”號)。例如:
$ jobs
[2] + Running tar tv3 *
[1] - Running find / -name README -print logfile
$ fg %find
find / -name README -print logfile
注意,顯示的命令行末尾沒有“”符號。下面命令能產生同樣的效果:
$ fg %1
這樣,find命令對應的進程就在前臺執行。當后臺只有一個作業時,鍵入不帶參數的fg命令,就能使相應進程移到前臺。當有兩個或更多的后臺作業時,鍵入不帶參數的fg,就把最后進入后臺的進程首先移到前臺。
· bg命令
bg命令可以把前臺進程換到后臺執行。其使用格式是:
bg [job…]
其中,job是一個或多個進程的PID、命令名稱或者作業號,在參數前要帶“%”號。例如,在cc(C編譯命令)命令執行過程中,按下Z鍵,使這個作業掛起。然后鍵入以下命令:
$ bg %cc
該掛起的作業在后臺重新開始執行。
linux后臺運行、關閉、查看后臺任務常用命令
一、
加在一個命令的最后,可以把這個命令放到后臺執行,如:
[root@bqh-01 ~]# watch -n 3 "sh 1.sh " #每3s在后臺執行一次 1.sh 腳本
二、ctrl + z
可以將一個正在前臺執行的命令放到后臺,并且處于暫停狀態。
三、jobs
查看當前有多少在后臺運行的命令
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。
將后臺中的命令調至 前臺 繼續運行。如果后臺中有多個命令,可以用fg %jobnumber(是命令編號,不是進程號)將選中的命令調出。
五、bg
將一個在后臺暫停的命令,變成在 后臺 繼續執行。如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調出。
六、kill
****
前臺進程的終止:Ctrl+c
****七、 nohup
如果讓程序始終在后臺執行,即使關閉當前的終端也執行(之前的做不到),這時候需要nohup。該命令可以在你退出帳戶/關閉終端之后繼續運行相應的進程。關閉中斷后,在另一個終端jobs已經無法看到后臺跑得程序了,此時利用ps(進程查看命令)
pre style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"ps -aux | grep "1.sh" #a:顯示所有程序 u:以用戶為主的格式來顯示 x:顯示所有程序,不以終端機來區分/pre
Linux系統中暫停正在運行的進程并放入后臺
當集群之間使用scp拷貝大容量文件時,往往需要將其放入后臺進行運行,但scp需要輸入用戶密碼,因此我們可以將scp進程暫停后放入后臺運行,具體步驟如下:
1、scp big_file xxx@xx.xx.xx.xx:~
2、ctrl+z鍵 (暫停終端命令窗口正在運行的進程)
3、bg %1 (將暫停的進程放入后臺運行)
4、jobs (查看后臺運行的進程)
ps:
bg命令基本格式為 bg %工作號(可通過jobs命令查看暫停和后臺運行的進程工作號)
當前名稱:linux常用命令bg linux常用命令在哪個目錄
路徑分享:http://www.xueling.net.cn/article/ddessog.html