第6章 進程管理

1.名詞解釋

(1)什麼是進程?------Centos7: systemd

進程是已啓動的可執行程序的運行實例,進程由以下組成部分:

已分配內存的地址空間;

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

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

進程狀態;

(2)進程的生命週期

父進程複製自己的地址空間(fork),創建一個新的子進程,每一個子進程都有自己的進程ID(PID),滿足跟蹤的安全性。父進程在子進程運行(running)期間會處於休眠(sleeping)狀態。當子進程完成時會發出(exit)信號請求,退出時,子進程會關閉或丟棄其資源環境,剩餘的部分稱爲僵停(殭屍Zombie)。父進程在子進程退出時收到信號而被喚醒,成(running)狀態。

2.查看進程process

(1)靜態查看進程ps

靜態查看進程 ps

[root@bjz ~]# ps aux |  less  -----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: 進程運行的終端   //可以開啓vim 查詢到終端名稱  (pts/0、pts/1)
STAT: 進程狀態 man ps (/STATE)
———————————————————————————
R 運行
S 可中斷睡眠 Sleep,(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
D 不可中斷睡眠,(收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生)
T 停止的進程
Z 殭屍進程
X 死掉的進程
————————————————————————————
[瞭解]
Ss s進程的領導者,父進程
S< <優先級較高的進程
SN N優先級較低的進程
R+ +表示是前臺的進程組
Sl 以線程的方式運行
————————————————————————————
START: 進程的啓動時間  //可以開啓vim ,在用date驗證。
TIME: 進程佔用CPU的總時間
COMMAND: 進程文件,進程名

(2)進程排序   【--sort】

原理:sort將文件的每一行作爲一個單位,相互比較,比較原則是從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。


sort的一些選項

sort的-u選項

它的作用很簡單,就是在輸出行中去除重複行。

sort的-r選項

sort默認的排序方式是升序,如果想改成降序,就加個-r就搞定了。

 sort的-n選項

你有沒有遇到過10比2小的情況。我反正遇到過。出現這種情況是由於排序程序將這些數字按字符來排序了,排序程序會先比較1和2,顯然1小,所以就將10放在2前面嘍。這也是sort的一貫作風。

我們如果想改變這種現狀,就要使用-n選項,來告訴sort,“要以數值來排序”!

sort的-t選項和-k選項

sort提供了-t選項,後面可以設定間隔符。

指定了間隔符之後,就可以用-k來指定列數了。

命令#sort  -n  -k3  -t:   /etc/passwd


擴展:

uniq 命令

uniq 是LINUX命令

用途:報告或刪除文件中重複的行       注意:處理已經排序sort好的文件。

-c 在輸出行前面加上每行在輸入文件中出現的次數。


cut命令

剪切ip地址,如下:

[root@localhost shell]# ifconfig eth0 | grep "inet addr"
          inet addr:192.168.1.199  Bcast:192.168.1.255  Mask:255.255.255.0
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2
192.168.1.199  Bcast        //以 : 爲分隔符,選取第二個域裏面的內容,輸出
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1
192.168.1.199             //以空格爲分割符,選取第一個域內的內容,輸出
[root@localhost shell]#


範圍控制:
    n:只有第n項
    n-:從第n項一直到行尾
    n-m:從第n項到第m項(包括m)
    -m:從一行的開始到第m項(包括m)
    -:從一行的開始到結束的所有項
# uptime |cut -d, -f3-5
# uptime |cut -d, -f3-  到行尾



1  以CPU佔比升序排列------>%cpu

    #ps  aux  --sort  %cpu  |   less        //升序排列

以CPU佔比降序排列------>%cpu

   #ps  aux   --sort  -%cpu  |  less      //-%cpu  降序排列

3  以內存佔比升序排列------>%mem

   #ps  aux --sort  %mem  | less

以內存佔比降序排列------>%mem

  #ps  aux  --sort  -%mem  |  less          也可用  #ps  aux  --sort=-%mem  |  less

(3)查看進程的父子關係

方法1:安裝一個進程,查看父子進程以及狀態,父子Ss和兒子S

            #yum  -y  install  httpd    //安裝網站程序

           #systemctl  start  httpd    //啓動網站

           #systemctl  stop  firewalld   //關閉防火牆

           #ps  auxf  |  grep  httpd   //查看網站程序----->auxf  (f-->format標準格式),加上f顯示的內容更加詳細

方法2:查看進程的父子關係,觀察PID和PPID

[root@bjz~]#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]

(4)自定義顯示字段 ( ps  axo

[root@bjz ~]# ps axo user,pid,ppid,%mem,command   //xo指定列顯示
[root@bjz ~]# 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
-----------------------------------------------------------
[root@bjz ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less    //針對某些程序,顯示某些列,再進行排序。簡潔明瞭

(5)查看指定進程的PID

方法1:    cat
[root@bjz~]# cat   /run/sshd.pid
830



方法2:   ps
[root@bjz ~]# ps aux  | grep sshd
root 10180 0.0 0.0 7224 1024 ? Ss 16:00 0:00 /usr/sbin/sshd


方法3:   pgrep

----->pgrep 是通過程序的名字來查詢進程的工具,一般是用來判斷程序是否正在運行。(-l  列出程序名和進程ID)

[root@bjz ~]# pgrep -l  sshd

10180 sshd

[root@bjz ~]# pgrep sshd

10180


方法4:     pidof

[root@bjz ~]# pidof sshd
10180


(6)查看樹進程   pstree

[root@bjz~]# pstree
如果沒有這個命令請安裝      #yum install -y psmisc

(7)動態查看進程    top

1.常用指令 :

h|?幫助
M 按內存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 對排序進行反轉
f 自定義顯示字段
1 顯示所有CPU的負載

< 向前
> 向後
z 彩色,Z設置彩色,使用數字調整
W 保存top環境設置


擴展:uptime


[root@LinServ-1 ~]# uptime
 15:31:30 up 127 days,  3:00,  1 user,  load average: 0.00, 0.00, 0.00

顯示內容說明:

15:31:30             //系統當前時間
up 127 days,  3:00   //主機已運行時間,時間越大,說明你的機器越穩定。
1 user               //用戶連接數,是總連接數而不是用戶數
load average: 0.00, 0.00, 0.00         // 系統平均負載,統計最近1,5,15分鐘的系統平均負載


2.動態查看進程 top,像windows的任務管理器


[root@tianyun ~]# top          //回車,立刻刷新。按z彩色顯示,按F,通過光標設置列的順序。
[root@localhost ~]# top -d 1   //每1秒刷新。
[root@localhost ~]# top -d 1 -p 10126 查看指定進程的動態信息   -d代表時間   -p代表進程
[root@localhost ~]# top -d 1 -p 10126,1    查看10126和1號進程
[root@localhost ~]# top -d 1 -u apache 查看指定用戶的進程
[root@localhost ~]# top -d 1 -b -n 2 > top.txt //-b附加參數,只看2次top信息後寫入到文件
[root@localhost ~]#vim  top.txt     //最後打開文件詳細閱讀

  

(8)使用信號控制進程    

1.信號種類

給進程發送信號
[root@tianyun ~]# kill -l //列出所有支持的信號
編號 信號名
1) SIGHUP 重新加載配置---使配置快速生效
2) SIGINT 鍵盤中斷Ctrl+C
3) SIGQUIT 鍵盤退出Ctrl+\,類似SIGINT
9) SIGKILL 強制終止,無條件
15) SIGTERM 終止(正常結束),缺省信號
18) SIGCONT 繼續
19) SIGSTOP 停止,該進程還未結束, 只是暫停執行
20)SIGTSTP 暫停Ctrl+Z

(9)相對優先級 nice

1.nice值範圍:   -20~19

   nice 值越高: 表示優先級越低,例如+19,該進程容易將CPU 使用量讓給其他進程。
   nice 值越低: 表示優先級越高,例如-20,該進程更不傾向於讓出CPU。
2.兩個值:nice值和PR值

  在top中顯示的優先級有兩個,PR值和nice值

查看進程的nice級別

(1) 使用top查看nice級別-------------例如:# top -d 1 -p 8721
          NI: 實際nice值
          PR: 將nice級別顯示爲映射到更大優先級隊列,-20映射到0,+19映射到39

(2)使用ps查看nice級別(自定義,顯示pid 和comm以及nice值並排序。)
[root@localhost ~]# ps axo pid,command,nice,cls  --sort=-nice
cls表示顯示策略列。
TS 表示該進程使用的調度策略爲SCHED_OTHER,普通策略,常規調度
FF表示高級進程first in  first out。高級策略

3.設置不同nice值得進程

啓動進程時,通常會繼承父進程的 nice級別,默認爲0。觀察兩個程序的不同nice值。
[root@localhost ~]# nice -n -5 sleep 6000 &    ------>  -n指定程序運行優先級的調整值 ,&程序後臺運行
[1] 2220
[root@localhost ~]# nice -n -10 sleep 7000 &
[2] 2229
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 6000                    2220  -5
sleep 7000                    2229 -10

4.更改現有進程的nice級別

(1)使用top修改使用top更改nice級別
[root@localhost ~]# top -d 1 -p 2630
按r鍵 //調整進程的優先級(Nice Level) (-20高) ---0--- (19低)
回車 //確認該程序。
-20
回車  //確認修改nice值。

如果直接使用top,使用R調整nice值,先輸入PID,再輸入nice值即可。

(2)使用shell更改

 修改他的nice值。
[root@localhost ~]# renice -20 2669
2669 (進程 ID) 舊優先級爲 0,新優先級爲 -20
觀察修舊的nice值。

  

注意:

1.  18繼續,19暫停   

# kill -STOP 5571        //等同於-19

# kill -cont 5571        //等同於-18

2.殺死一個用戶

[root@bjz ~]# pkill -u alice

殺掉了用戶。

3.殺死一個終端

 查詢當前用戶。發現多人用同一個賬號登錄系統。在其中一個普通賬戶上開啓一個sleep程序。

[root@localhost ~]# w                                               w-----顯示目前有幾個用戶登錄,以及他們在做什麼

[root@localhost ~]# pkill -t pts/2                              //終止pts/2上所有進程

上一步殺死的只是終端上的所有程序。要想殺死該用戶的終端,使用-9

[root@localhost ~]# pkill -9  -t  pts/2                       //終止pts/2上所有進程 並結束該pts/2

4. 通過top殺死該進程。
[root@localhost ~]# top -d 1 -p 2058                      (d----date    p ---PID)
k
9

回車

5.kill帶ID,killall帶程序名稱                        ------killall  後面加進程的名稱

[root@localhost ~]# killall  vim

(9)作業控制  jobs

1.簡介            在shell中同時運行多個命令。&和ctrl+Z

作業控制是一個命令行功能,允許一個shell 實例來運行和管理多個命令。
如果沒有作業控制,父進程fork()一個子進程後,將sleeping,直到子進程退出。
使用作業控制,可以選擇性暫停,恢復,以及異步運行命令,讓 shell 可以在子進程運行期間返回接受其他命令。

關鍵詞介紹
foreground, background, and controlling terminal

foreground: 前臺進程:是在終端中運行的命令,該終端爲進程的控制終端。前臺進程接收鍵盤產生的輸入和信號,並允許從終端讀取或寫入到終端。
background: 後臺進程:沒有控制終端,它不需要終端的交互。

2.  直接運行後臺程序。暫停一個前臺程序。
[root@bjz ~]# sleep 3000 &          //運行程序(時),讓其在後臺執行
[root@bjz ~]# sleep 4000             //按ctrl+z,將前臺的程序掛起(暫停)到後臺
[2]+ Stopped sleep 4000


3.執行暫停程序,和調動後臺程序至前臺。----------#jobs       查看後臺運行進程的狀態和序號
[root@bjz ~]# bg 2 //讓作業2在後臺,從暫停到運行
[root@bjz ~]# fg  1 //將作業1調回到前臺

[root@bjz ~]# kill  %1                  -------//kill %1,結束後臺作業1.

注意,kill 1   和   kill   %1  不同,前者終止PID爲1的進程,後者是殺死後臺的作業。

(10)文件系統proc

虛擬文件系統:存儲內核硬件的信息(cpuinfo、meminfo)、臨時存儲進程運行的狀態信息,proc下的數字代表進程的PID

1.查看CPU的信息

# lscpu

或# cat /proc/cpuinfo

2.查看內存的信息

# less /proc/meminfo
# free -m       -----m是以兆爲單位去查看內存的信息

3.查看服務器是否支持虛擬化------多路複用技術

lm(64位)---------------------------------

vmx 支持虛擬化 Intel----------------------
svm 支持虛擬化 AMD-------------------------

# egrep 'lm|vmx|svm' /proc/cpuinfo

4.查看內核--------/boot中也能查看內核

# cat /proc/cmdline

5.查看CPU使用率

# uptime




發佈了34 篇原創文章 · 獲贊 2 · 訪問量 4459
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章