天天看點

Linux程序管理一,名詞解釋二,檢視程序 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

一,名詞解釋

1,什麼是程序?

程序是已啟動的可執行程式的運作執行個體,程序有以下組成部分:

• 已配置設定記憶體的位址空間;

• 安全屬性,包括所有權憑據和特權;

• 程式代碼的一個或多個執行線程;

• 程序狀态。

程式: 二進制檔案,靜态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix

程序: 是程式運作的過程, 動态,有生命周期及運作狀态。

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

2,程序的生命周期

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

 父程序複制自己的位址空間(fork)建立一個新的(子)程序結構。每個新程序配置設定一個唯一的程序 ID (PID),滿足跟蹤安全性之需。PID 和 父程序 ID (PPID)是子程序環境的元素,任何程序都可以建立子程序,所有程序都是第一個系統程序的後代:

Centos5/6: init

Centos7: systemd

子程序繼承父程序的安全性身份、過去和目前的檔案描述符、

端口和資源特權、環境變量,以及程式代碼。

随後,子程序可能exec自己的程式代碼。

通常,父程序在子程序運作期間處于睡眠(sleeping)狀态。

當子程序完成時發出(exit)信号請求,在退出時,

子程序已經關閉或丢棄了其資源環境,剩餘的部分稱之為僵停(僵屍Zombie)。父程序在子程序退出時收到信号而被喚醒,

清理剩餘的結構,然後繼續執行其自己的程式代碼。

3, 程序狀态

在多任務處理作業系統中,每個CPU(或核心)

在一個時間點上隻能處理一個程序。

在程序運作時,它對CPU 時間和資源配置設定的要求會不斷變化,

進而為程序配置設定一個狀态,它随着環境要求而改變。

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)
Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

二,檢視程序 process

1,目标

了解如程序的:

• PID,PPID

• 目前的程序狀态

• 記憶體的配置設定情況

• CPU和已花費的實際時間

• 使用者UID,它決定程序的特權

2,靜态檢視程序(ps)

2.1  檢視程序 ps

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

[[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 檢視程序樹

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

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會有展現。

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

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)

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

給程序發送信号

[[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代表的是自己。

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

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值得範圍:

Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)
Linux程式管理一,名詞解釋二,檢視程式 process三,作業控制 jobs(了解)四,檔案系統proc(了解)

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

繼續閱讀