一,名詞解釋
1,什麼是程序?
程序是已啟動的可執行程式的運作執行個體,程序有以下組成部分:
• 已配置設定記憶體的位址空間;
• 安全屬性,包括所有權憑據和特權;
• 程式代碼的一個或多個執行線程;
• 程序狀态。
程式: 二進制檔案,靜态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix
程序: 是程式運作的過程, 動态,有生命周期及運作狀态。
2,程序的生命周期
父程序複制自己的位址空間(fork)建立一個新的(子)程序結構。每個新程序配置設定一個唯一的程序 ID (PID),滿足跟蹤安全性之需。PID 和 父程序 ID (PPID)是子程序環境的元素,任何程序都可以建立子程序,所有程序都是第一個系統程序的後代:
Centos5/6: init
Centos7: systemd
子程序繼承父程序的安全性身份、過去和目前的檔案描述符、
端口和資源特權、環境變量,以及程式代碼。
随後,子程序可能exec自己的程式代碼。
通常,父程序在子程序運作期間處于睡眠(sleeping)狀态。
當子程序完成時發出(exit)信号請求,在退出時,
子程序已經關閉或丢棄了其資源環境,剩餘的部分稱之為僵停(僵屍Zombie)。父程序在子程序退出時收到信号而被喚醒,
清理剩餘的結構,然後繼續執行其自己的程式代碼。
3, 程序狀态
在多任務處理作業系統中,每個CPU(或核心)
在一個時間點上隻能處理一個程序。
在程序運作時,它對CPU 時間和資源配置設定的要求會不斷變化,
進而為程序配置設定一個狀态,它随着環境要求而改變。
二,檢視程序 process
1,目标
了解如程序的:
• PID,PPID
• 目前的程序狀态
• 記憶體的配置設定情況
• CPU和已花費的實際時間
• 使用者UID,它決定程序的特權
2,靜态檢視程序(ps)
2.1 檢視程序 ps
[[email protected] ~]# ps aux | less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 128096 6708 ? Ss 16:20 0:01 /usr/lib/systemd/systemd
————————————————————————————
USER: 運作程序的使用者
PID: 程序ID
%CPU: CPU占用率
%MEM: 記憶體占用率
VSZ: 占用虛拟記憶體
RSS: 占用實際記憶體
TTY: 程序運作的終端 (其中tty1-tty7代表本地控制台終端,tty1-tty6是本地字元界面終端,tty7是圖形終端。pts/0-255代表虛拟終端。) //可以開啟vim 查詢到終端名稱
STAT: 程序狀态 man ps (/STATE)
———————————————————————————
R 運作
S 可中斷睡眠 Sleep,(休眠中, 受阻, 在等待某個條件的形成或接受到信号)
D 不可中斷睡眠,(收到信号不喚醒和不可運作, 程序必須等待直到有中斷發生)
T 停止的程序
Z 僵屍程序
X 死掉的程序
————————————————————————————
[了解]
Ss s程序的上司者,父程序
S< <優先級較高的程序
SN N優先級較低的程序
R+ +表示是前台的程序組
Sl 以線程的方式運作
————————————————————————————
START: 程序的啟動時間 //可以開啟vim ,在用date驗證。
TIME: 程序占用CPU的總時間
COMMAND: 程序檔案,程序名
示例1:程序的排序
1 以CPU占比降序排列
[[email protected] ~]# ps aux --sort %cpu |less //--sort排序,升序
2 以CPU占比升序排列
[[email protected] ~]# ps aux --sort -%cpu |less //-%CPU降序
3 以駐留記憶體升序排列
[[email protected] ~]# ps aux --sort rss |less
4 以駐留記憶體降序排列
[[email protected] ~]# ps aux --sort -rss |less
示例2:程序的父子關系
安裝一個程序觀察,父子程序以及狀态。父親Ss 和 兒子S
[[email protected] ~]$ sudo yum -y install httpd //安裝網站程式。
[[email protected] ~]$ sudo systemctl start httpd //啟動網站
[[email protected] ~]$ sudo systemctl stop firewalld //關閉防火牆
[[email protected] ~]# ps auxf |grep httpd //檢視網站程式。
root 9279 0.0 0.0 4264 672 pts/1 S+ 14:37 0:00 \_ grep httpd
root 8310 0.0 0.1 10092 2912 ? Ss 14:19 0:00 /usr/sbin/httpd
apache 8311 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8312 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8313 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8314 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8315 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8316 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8318 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8319 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
檢視程序的父子關系。 請觀察PID和PPID
[[email protected] ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 1月22 ? 00:00:07 /usr/lib/systemd/systemd
root 2 0 0 1月22 ? 00:00:00 [kthreadd]
root 3 2 0 1月22 ? 00:00:06 [ksoftirqd/0]
示例3:自定義顯示字段
//自定義顯示字段 --------------------------------
[[email protected] ~]# ps axo user,pid,ppid,%mem,command //xo指定列顯示
[[email protected] ~]# ps axo user,pid,ppid,%mem,command |grep httpd
root 8310 1 0.1 /usr/sbin/httpd
apache 8311 8310 0.0 /usr/sbin/httpd
apache 8312 8310 0.0 /usr/sbin/httpd
apache 8313 8310 0.0 /usr/sbin/httpd
apache 8314 8310 0.0 /usr/sbin/httpd
apache 8315 8310 0.0 /usr/sbin/httpd
apache 8316 8310 0.0 /usr/sbin/httpd
apache 8318 8310 0.0 /usr/sbin/httpd
apache 8319 8310 0.0 /usr/sbin/httpd
root 9236 6798 0.0 grep httpd
-----------------------------------------------------------
[[email protected] ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less //針對某些程式,顯示某些列,再進行排序。簡潔明了
2.2 檢視程序PID的四種方法
//檢視指定程序的PID,四種方法————————
第一種。cat
[[email protected] ~]$ cat /run/sshd.pid
830
第二種。ps
[[email protected] ~]# ps aux |grep sshd
root 10180 0.0 0.0 7224 1024 ? Ss 16:00 0:00 /usr/sbin/sshd
第三種。pgrep
[[email protected] ~]# pgrep -l sshd
10180 sshd
[[email protected] ~]# pgrep sshd
10180
第四種。pidof
[[email protected] ~]# pidof sshd
10180
2.3 檢視程序樹
3,動态檢視程序(top)
3.1 上半部分
第一部分:系統整體統計資訊
top - 11:45:08 up 18:54, 4 users, load average: 0.05, 0.05, 0.05
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3865520 total, 1100000 free, 580268 used, 2185252 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2917828 avail Mem
負載權重值解釋:—小于1正常————————————
load average: 0.86, 0.56, 0.78 系統最近 1分鐘,5分鐘,15分鐘平均負載
第一行是任務隊列:
目前時間
系統運作時間,格式為時:分
目前登入使用者數
系統負載,即任務隊列的平均長度。三個數值分别為 1分鐘、5分鐘、15分鐘前到現在的平均值。
第二、三行為程序和CPU的資訊:
total 程序總數
running 正在運作的程序數
sleeping 睡眠的程序數
stopped 停止的程序數
zombie 僵屍程序數
Cpu(s):
us 使用者空間占用CPU百分比
sy 核心空間占用CPU百分比
ni 使用者程序空間内改變過優先級的程序占用CPU百分比
id 空閑CPU百分比
wa 等待輸入輸出的CPU時間百分比
hi:硬體CPU中斷占用百分比
si:軟中斷占用百分比
st:虛拟機占用百分比
第四和第五行是記憶體資訊:
Mem:
KiB Mem代表實體記憶體,KiB Swap代表交換空間,它們的機關都是KiB。
total、used和free沒什麼好介紹的,就是總共多少,然後用了多少,還剩多少。
buff/cached代表了buff和cache總共用了多少,buff一般都比較小,跟cache比可以忽略不計;cache代表是用來緩存磁盤上檔案内容的,是以占有空間很大,Linux一般會盡可能多的将空閑實體記憶體用于 cache。
Swap:
total 交換區總量
used 使用的交換區總量
free 空閑交換區總量
avail Mem表示可用于程序下一次配置設定的實體記憶體數量,這個大小一般比free大一點,因為除了free的空間外,系統還能立即釋放出一些空間來。
其中可以觀察buffers的一個小實驗:
做個小實驗,觀察緩存的作用。
time cp -rf /etc /tmp/etc1
time cp -rf /etc /tmp/etc1
注意觀察兩次複制的時間,大大縮小,是因第二次的資料已經到了buffer了。
在top的buffer/cache會有展現。
3.2 下半部分
3.2.1字段的介紹:
PID,USER,%CPU,%MEM(上面已經解釋)
VIRT:virtual memory usage 虛拟記憶體
1、程序“需要的”虛拟記憶體大小,包括程序使用的庫、代碼、資料等
2、假如程序申請100m的記憶體,但實際隻使用了10m,那麼它會增長100m,而不是實際的使用量
3、需要這些記憶體,但并沒有占滿
RES:resident memory usage 常駐記憶體
1、程序目前使用的記憶體大小
2、包含其他程序的共享
3、如果申請100m的記憶體,實際使用10m,它隻增長10m,與VIRT相反
SHR:shared memory 共享記憶體
1、除了自身程序的共享記憶體,也包括其他程序的共享記憶體
2、計算某個程序所占的實體記憶體大小公式: RES-SHR
3.2.2常用指令:
指令
h|?幫助
M 按記憶體的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 對排序進行反轉
f 自定義顯示字段
1 顯示所有CPU的負載
< 向前
> 向後
z 彩色,Z設定彩色,使用數字調整
W 儲存top環境設定
3.3 top使用技巧
動态檢視程序 top,像windows的任務管理器
[[email protected] ~]# top //回車,立刻重新整理。按z彩色顯示,按F,通過光标設定列的順序。
[[email protected] ~]# top -d 1 //每1秒重新整理。
[[email protected] ~]# top -d 1 -p 10126 檢視指定程序的動态資訊
[[email protected] ~]# top -d 1 -p 10126,1 檢視10126和1号程序
[[email protected] ~]# top -d 1 -u apache 檢視指定使用者的程序
[[email protected] ~]# top -d 1 -b -n 2 > top.txt //-b附加參數,隻看2次top資訊後寫入到檔案
[[email protected] ~]#vim top.txt //最後打開檔案詳細閱讀
3.4 top的互動指令(了解)
Ctrl+L 擦除并且重寫螢幕。
h或者? 顯示幫助畫面,給出一些簡短的指令總結說明。
k 終止一個程序。系統将提示使用者輸入需要終止的程序PID,以及需要發送給該程序什麼樣的信号。一般的終止程序可以使用15信号;如果不能正常結束那就使用信号9強制結束該程序。預設值是信号15。在安全模式中此指令被屏蔽。
i 忽略閑置和僵死程序。這是一個開關式指令。
q 退出程式。
r 重新安排一個程序的優先級别。系統提示使用者輸入需要改變的程序PID以及需要設定的程序優先級值。輸入一個正值将使優先級降低,反之則可以使該程序擁有更高的優先權。預設值是10。
S 切換到累計模式。
s 改變兩次重新整理之間的延遲時間。系統将提示使用者輸入新的時間,機關為s。如果有小數,就換算成m s。輸入0值則系統将不斷重新整理,預設值是5 s。需要注意的是如果設定太小的時間,很可能會引起不斷重新整理,進而根本來不及看清顯示的情況,而且系統負載也會大大增加。
f或者F 從目前顯示中添加或者删除項目。
o或者O 改變顯示項目的順序。
l 切換顯示平均負載和啟動時間資訊。
m 切換顯示記憶體資訊。
t 切換顯示程序和CPU狀态資訊。
c 切換顯示指令名稱和完整指令行。
M 根據駐留記憶體大小進行排序。
P 根據CPU使用百分比大小進行排序。
T 根據時間/累計時間進行排序。
W 将目前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。
3,使用信号控制程序
3.1 信号的種類(kill)
給程序發送信号
[[email protected] ~]# kill -l //列出所有支援的信号,後面跟程序ID,即可對程序控制
編号 信号名
1) SIGHUP 重新加載配置(平滑的重新開機)
2) SIGINT 鍵盤中斷Ctrl+C
3) SIGQUIT 鍵盤退出Ctrl+\,類似SIGINT
9) SIGKILL 強制終止,無條件
15) SIGTERM 終止(正常結束),預設信号
18) SIGCONT 繼續
19) SIGSTOP 停止,該程序還未結束, 隻是暫停執行
20)SIGTSTP 暫停Ctrl+Z
重點1,9,15。請注意1和15的差別
3.2 各種指令用法(除了上面的kill,還有killall,pkill,top)
killall [選項][信号] 程序名 //按照程序名殺死程序
選項: -i :互動式,詢問是否要殺死某個程序
-I :忽略程序名的大小寫
pkill [選項][信号] 程序名 // 按照程序名終止程序
選項: -t 終端号:按照終端号踢出使用者
如果不知道哪些終端登陸了本機,可以使用w指令
如下:w代表的是自己。
top也可以殺死程序,top本身是檢視程序的,可以top檢視程序時通過互動的形式殺死程序。
以下是針對以上的幾個指令列舉的示例:
示例1:給vsftpd程序發送信号1,15(重新加載配置,再停止。)
1 安裝檔案伺服器并啟動。
[[email protected] ~]# yum install -y vsftpd
[[email protected] ~]# systemctl start vsftpd
[[email protected] ~]# systemctl stop firewalld
2 查詢檔案伺服器程序。
[[email protected] ~]# ps aux |grep vsftpd
root 9160 0.0 0.0 52580 904 ? Ss 21:54 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
注意觀察程序PID
3 重新開機程序。觀察程序ID未變
[[email protected] ~]# kill -1 9160 //發送重新開機信号**************
例如vsftpd的配置檔案發生改變,希望重新加載
root 9160 0.0 0.0 52580 904 ? Ss 21:54 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
4 發送停止信号。搜尋不到程序了。
[[email protected] ~]# kill 9160 //發送停止信号****************
vsftpd服務有停止的腳本 systemctl stop vsftpd
[[email protected] ~]# ps aux |grep vsftpd
示例2:對任務計劃程序(crond)發送1和15信号。
//1
[[email protected] ~]$ ps aux |grep crond
root 478 0.0 0.1 124144 1572 ? Ss 09:35 0:00 /usr/sbin/crond -n
[[email protected] ~]$ kill -1 478
[[email protected] ~]$ ps aux |grep crond
root 478 0.0 0.1 124144 1572 ? Ss 09:35 0:00 /usr/sbin/crond -n
//15
[[email protected] ~]$ kill 478
[[email protected] ~]$ ps aux |grep crond
[[email protected] ~]$ systemctl start crond
[[email protected] ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1548 ? Ss 14:54 0:00 /usr/sbin/crond -n
示例3:信号測試9,15
1 建立2個檔案,檢視終端号。
[[email protected] ~]# touch file1 file2
[[email protected] ~]# tty
/dev/pts/1
2 通過一個終端,打開一個vim
[[email protected] ~]# vim file1
3 通過另一個終端,打開一個vim
[[email protected] ~]# tty
/dev/pts/2
[[email protected] ~]# vim file2
3 通過另一個終端,查詢兩個程序。
[[email protected] ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2
4 發送信号15 和信号9 ,觀察兩個終端程式狀态。
[[email protected] ~]# kill 4362
[[email protected] ~]# kill -9 4363
觀察兩個終端,一個正常終止,一個非法殺死。
——————————————————————————————
5 重複第1-3步,使用killall 殺死所有vim程序。
[[email protected] ~]# killall vim //給所有vim程序發送信号
[[email protected] ~]# killall httpd
建議盡量不要使用kill -9
示例4:信号測試18繼續,19暫停
1 查詢遠端登入程式SSH的程序号(使用不同終端登陸伺服器)
[[email protected] ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd
2 發送暫停信号,并查詢狀态Ts
[[email protected] ~]# kill -STOP 5571 //等同于-19
[[email protected] ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ts 09:35 0:00 /usr/sbin/sshd
看到狀态為Ts不再接受處理。T停止狀态
3 發送繼續信号,檢視狀态,發現終端可以繼續運作。
[[email protected] ~]# kill -cont 5571 //等同于-18
[[email protected] ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd
又繼續運作了。cont 就S 狀态了。
示例5:示範信号18和19計劃任務
1 檢視計劃任務程式crond
[[email protected] ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ss 14:54 0:00 /usr/sbin/crond -n
yang 22427 0.0 0.0 112648 964 pts/2 R+ 15:07 0:00 grep --color=auto crond
2 暫停計劃任務程式。
[[email protected] ~]$
[[email protected] ~]$ sudo kill -19 22319
[[email protected] ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ts 14:54 0:00 /usr/sbin/crond -n
yang 22431 0.0 0.0 112648 964 pts/2 R+ 15:07 0:00 grep --color=auto crond
3 繼續計劃任務程式。觀察狀态
[[email protected] ~]$
[[email protected] ~]$ sudo kill -cont 22319
[[email protected] ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ss 14:54 0:00 /usr/sbin/crond -n
yang 22436 0.0 0.0 112648 960 pts/2 R+ 15:08 0:00 grep --color=auto crond
總結:kill帶ID,killall帶程式名稱
kill (PID or Job ID) killall (name)
示例6:踢出一個從遠端登入到本機的使用者(殺死一個使用者)
1 檢視pkill指令
[[email protected] ~]# pkill --help
大家多看幫助,翻譯可以借助軟體。
2 請使用一個普通使用者登入系統。殺掉一個連接配接使用者。
ssh [email protected]
[[email protected] ~]# pkill -u alice
殺掉了使用者。
示例7:殺死一個終端
1 查詢目前使用者。發現多人用同一個賬号登入系統。在其中一個普通賬戶上開啟一個sleep程式。
[[email protected] ~]# w
06:48:38 up 4 min, 4 users, load average: 0.07, 0.14, 0.08
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/0 192.168.100.254 06:44 3:58 0.05s 0.05s -bash
root pts/1 192.168.100.254 06:44 6.00s 0.04s 0.00s w
aofa pts/2 192.168.100.254 06:44 6.00s 0.03s 0.00s sleep 3000
2 殺掉使用者有個問題,多人用同一個使用者。可以用終端pkill掉
[[email protected] ~]# pkill -t pts/2 //終止pts/2上所有程序
3 回到pts/2終端觀察程序狀态。
[[email protected] ~]$ sleep 3000
已終止
4 第三步殺死的隻是終端上的程式。要想殺死該使用者的終端,使用-9
[[email protected] ~]# pkill -9 -t pts/2
//終止pts/2上所有程序 并結束該pts/2
5 觀察使用者登入情況。少了aofa使用者。
[[email protected] ~]# w
06:51:30 up 7 min, 3 users, load average: 0.07, 0.10, 0.06
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/0 192.168.100.254 06:44 6:50 0.05s 0.05s -bash
root pts/1 192.168.100.254 06:44 2.00s 0.05s 0.01s w
示例8:top殺死一個程序
top也可殺死程序
1 請使用一個終端,開啟一個程序。
[[email protected] ~]$ sleep 10000
2 在另一個終端查詢并殺死該程序。
[[email protected] ~]# ps aux | grep sleep
root 2004 0.0 0.0 107896 604 ? S 06:51 0:00 sleep 60
aofa 2058 0.0 0.0 107896 604 pts/2 S+ 06:52 0:00 sleep 10000
root 2063 0.0 0.0 112664 972 pts/1 R+ 06:52 0:00 grep --color=auto sleep
3 通過top殺死該程序。
[[email protected] ~]# top -d 1 -p 2058
k
9
回車
4,程序優先級nice
4.1 簡介
Linux作業系統是一個多使用者、多任務的作業系統,Linux系統中通知運作着非常多的程序。但是cup在同一個始時鐘周期内隻能運作一個指令。程序優先級決定了每個程序處理的先後順序。程序的排程可以讓多個程序在cup上面高速的切換,進而給使用者多個程序在同時運作的印象。
4.2 相對優先級nice
4.2.1排程政策
1,普通政策:sched——other常用排程:TS
2,進階政策:sched——fifo先進先出:FS
4.2.2普通的排程政策
1,nice值得範圍:
nice 值越高: 表示優先級越低,例如+19,該程序容易将CPU 使用量讓給其他程序。
nice 值越低: 表示優先級越高,例如-20,該程序更不傾向于讓出CPU。
2,nice值和PR(PRI)值 //PR和PRI都是Priority優先級的意思,顯示不同跟Centos版本有關。
在top中顯示的優先級有兩個,PR(PRI)值和nice值
檢視程序的nice級别
1. 使用top檢視nice級别
NI: 實際nice值
PR(PRI): 将nice級别顯示為映射到更大優先級隊列,-20映射到0,+19映射到39
4.3 檢視程序的nice級别
使用ps檢視nice級别(自定義,顯示pid 和comm以及nice值并排序。)
[[email protected] ~]# ps axo pid,command,nice,cls --sort=-nice
cls表示顯示政策列。
TS 表示該程序使用的排程政策為SCHED_OTHER
FF表示進階程序first in first out。
4.4 啟動具有不同nice級别的程序
示例:不同的nice值
啟動具有不同nice級别的程序
啟動程序時,通常會繼承父程序的 nice級别,預設為0。觀察兩個程式的不同nice值。
[[email protected] ~]# nice -n -5 sleep 6000 &
[1] 2220
[[email protected] ~]# nice -n -10 sleep 7000 &
[2] 2229
[[email protected] ~]# ps axo command,pid,nice | grep sleep
sleep 6000 2220 -5
sleep 7000 2229 -10
grep --color=auto sleep 2233 0
4.5 更改現有程序的nice級别
1,使用top更改
更改現有程序的nice級别
1 打開一個程式
[[email protected] ~]# sleep 12345 &
[1] 2630
2 查詢該程序
[[email protected] ~]# ps aux | grep sleep
root 2630 0.0 0.0 107896 604 pts/0 S 07:29 0:00 sleep 12345
3 使用top更改nice級别
[[email protected] ~]# top -d 1 -p 2630
按r鍵 //調整程序的優先級(Nice Level) (-20高) ---0--- (19低)
回車 //确認該程式。
-20
回車 //确認修改nice值。
如果直接使用top,使用R調整nice值,先輸入PID,再輸入nice值即可。
2,使用shell更改
使用shell更改nice級别
1 建立一個睡眠程式。
[[email protected] ~]# sleep 7000 &
[2] 2669
2 修改他的nice值。
[[email protected] ~]# renice -20 2669
2669 (程序 ID) 舊優先級為 0,新優先級為 -20
觀察修舊的nice值。
注意:nice [選項] 指令 //可以給新執行的指令直接賦予NI值,但是不能修改已經存在程序的NI值
例如:nice -n -5 service httpd start
renice [優先級] PID //renice指令是修改已經存在程序的NI值得指令
例如:renice -10 2125
三,作業控制 jobs(了解)
3.1 簡介
作業控制是一個指令行功能,允許一個shell 執行個體來運作和管理多個指令。
如果沒有作業控制,父程序fork()一個子程序後,将sleeping,直到子程序退出。
使用作業控制,可以選擇性暫停,恢複,以及異步運作指令,讓 shell 可以在子程序運作期間傳回接受其他指令。
關鍵詞介紹
foreground, background, and controlling terminal
foreground: 前台程序:是在終端中運作的指令,該終端為程序的控制終端。前台程序接收鍵盤産生的輸入和信号,并允許從終端讀取或寫入到終端。
background: 背景程序:沒有控制終端,它不需要終端的互動。
3.2 作業控制示例
示例1:前背景調動
[[email protected] ~]# sleep 2000
運作一個程式,目前終端無法輸入。
1 直接運作背景程式。暫停一個前台程式。
[[email protected] ~]# sleep 3000 & //運作程式(時),讓其在背景執行
[[email protected] ~]# sleep 4000 //^Z,将前台的程式挂起(暫停)到背景
[2]+ Stopped sleep 4000
2 查詢所有程式。注意一個是背景運作S,一個背景暫停T。
[[email protected] ~]# ps aux |grep sleep
root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000
root 8896 0.0 0.0 100900 556 pts/0 T 12:13 0:00 sleep 4000
3 隻檢視背景程序。
[[email protected] ~]# jobs //檢視背景作業
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000
4 執行暫停程式,和調動背景程式至前台。
[[email protected] ~]# bg 2 //讓作業2在背景,從暫停到運作
[[email protected] ~]# fg 1 //将作業1調回到前台
[[email protected] ~]# kill %1 //kill %1,結束背景作業1.
注意,kill 1 和 kill %1 不同,前者終止PID為1的程序,後者殺死作業。
示例2:如何管理遠端主機
[[email protected] ~]# ssh 172.16.50.240
[[email protected] ~]# yum -y install screen
[[email protected] ~]# screen -S install_apache //-S啟動會話的名字
sleep 9000
==斷網後,重新連接配接==
[[email protected] ~]# screen -list
There are screens on:
28958.install_nginx (Detached)
29013.install_apache (Detached)
2 Sockets in /var/run/screen/S-root.
[[email protected] ~]# screen -r 29013
示例3:(了解)
&符号在程式的末尾才是背景運作,請看下面的例子,指令中的&并不是背景運作的意思。
while :; do date; sleep 2; done //查詢時間,間隔兩秒。ctrl+C停止。
[[email protected] ~]# (while :; do date; sleep 2; done) & //程序在背景運作,但輸出依然在目前終端(使用fg調到前台,ctrl+C終止。)
[[email protected] ~]# (while :; do date; sleep 2; done) &>/dev/null &
四,檔案系統proc(了解)
4.1 簡介
虛拟化檔案系統:記憶體、程序運作的狀态資訊
4.2 cup
/proc/cpuinfo
[[email protected] ~]# grep 'processor' /proc/cpuinfo //邏輯cpu的個數
processor : 0
processor : 1
[[email protected] ~]# grep 'physical id' /proc/cpuinfo //實體cpu的個數
physical id : 0
physical id : 0
==flags
lm(64位)---------------------------------
vmx 支援虛拟化 Intel----------------------
svm 支援虛拟化 AMD-------------------------
[[email protected] ~]# egrep 'lm|vmx|svm' /proc/cpuinfo
flags : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
[[email protected] ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
4.3 記憶體
/proc/meminfo
[[email protected] ~]# less /proc/meminfo
[[email protected] ~]# free -m
total used free shared buff/cache available
Mem: 7950 704 6540 100 705 6908
Swap: 2047 0 2047
4.4 核心
/proc/cmdline //核心啟動參數
[[email protected] ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-327.el7.x86_64 root=UUID=9b17ab4e-cd93-4f84-bd1e-7241a0baac9b ro rhgb quiet LANG=zh_CN.UTF-8
4.5 使用率
uptime
[[email protected] ~]# uptime
17:20:58 up 8:33, 3 users, load average: 0.43, 0.36, 0.36
4.6 網絡
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1
[[email protected] ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward