linux系統管理-進程管理

linux系統管理-進程管理

程序和進程的區別

1.程序是數據和指令的集合,是一個靜態的概念,好比/bin/ls、/bin/cp等二進制文件,同時程序能夠長期存在系統中。nginx

2.進程是一個程序的運行過程,是一個動態概念,進程是存在生命週期概念的,也就是說進程會隨着程序的終止而銷燬,不會永遠在系統中存在。apache

進程的生命週期

img

程序運行是進程的狀態關係

1.當父進程接收到任務調度時,會經過fork派生子進程來處理,那麼子進程會集成父進程的衣鉢。
2.子進程在處理任務代碼時,父進程會進入等待的狀態...
3.若是子進程在處理任務過程當中,父進程退出了,子進程沒有退出,那麼這些子進程就沒有父進程來管理了,就變成了殭屍進程。
4.每一個進程都會有本身的PID號,(process id)子進程則PPIDvim

進程狀態管理命令(靜態)

使用ps命令查看當前的進程狀態(靜態查看)bash

經常使用組合:ps aux 查看進程服務器

[root@zls ~]# ps aux
a:顯示全部與終端相關的進程,由終端發起的
u:顯示用戶導向的用戶列表
x:顯示全部與終端無關的進程

在多任務處理操做系統中,每一個CPU(或核心)在一個時間點上只能處理一個進程。
在進程運行時,它對 CPU 時間和資源分配的要求會不斷變化,從而爲進程分配一個狀態,它隨着環境要求而改變。less

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
USER:       //啓動程序的用戶
PID:        //進程ID
%CPU:       //佔用CPU的百分比
%MEM:       //佔用內存的百分比
VSZ:        //虛擬內存集(進程佔用虛擬內存的空間)
RSS:        //物理內存集(進程佔用物理內存的空間)

TTY:        //運行的終端
        ?:      #內核運行的終端
        tty1:   #機器運行的終端
        pts/0:  #遠程鏈接的終端

STAT:       //進程狀態
        D:      #沒法中斷的休眠狀態(通IO的進程)
        R:      #正在運行的狀態
        S:      #處於休眠的狀態
        T:      #暫停或被追蹤的狀態
        W:      #進入內存交換(從內核2.6開始無效)
        X:      #死掉的進程(少見)
        Z:      #殭屍進程
        <:      #優先級高的進程
        N:      #優先級較低的進程
        L:      #有些頁被鎖進內存
        s:      #父進程(在它之下有子進程開啓着)
        +:      #該進程運行在前臺
        
        l:      #以線程的方式運行
        |:      #多進程的
        
START:      //進程被觸發開啓的時間
TIME:       //該進程實際使用CPU的運行時間
COMMAND:    //命令的名稱和參數
        [] :     #內核態的進程
        沒[]:    #用戶態的進程

進程的相關命令

#對進程的CPU進行排序展現
[root@zls ~]# ps aux --sort %cpu |less

#對進程的佔用物理內存排序
[root@zls ~]# ps aux --sort rss |less

#排序,是在記不住,那就本身排序
[root@zls ~]# ps aux|sort -k3 -n

#自定義顯示字段
[root@zls ~]# ps axo user,pid,ppid,%mem,command |grep sshd
root        869      1  0.2 /usr/sbin/sshd -D
root       1194    869  0.2 sshd: root@pts/0
root       1307    869  0.2 sshd: root@pts/1
root       1574    869  0.2 sshd: root@pts/2

#顯示進程的子進程
[root@zls ~]# yum install nginx -y
[root@zls ~]# systemctl start nginx
[root@zls ~]# ps auxf|grep [n]ginx
root       2033  0.0  0.1 125096  2112 ?        Ss   13:29   0:00 nginx: master process /usr/sbin/nginx
nginx      2034  0.0  0.1 125484  3148 ?        S    13:29   0:00  \_ nginx: worker process

#查看指定進程PID
[root@zls ~]# ps aux|grep sshd
root       1157  0.0  0.1 105996  3604 ?        Ss   Feb27   0:00 /usr/sbin/sshd -D
[root@zls ~]# cat /run/sshd.pid
1157

#pgrep經常使用參數, -l -a
[root@zls ~]# pgrep sshd
869
1194
1307
1574
[root@zls ~]# pgrep -l sshd
869 sshd
1194 sshd
1307 sshd
1574 sshd
[root@zls ~]# pgrep -l -a sshd
869 /usr/sbin/sshd -D
1194 sshd: root@pts/0
1307 sshd: root@pts/1
1574 sshd: root@pts/2

#查看進程的pid
[root@zls ~]# pidof sshd
1574 1307 1194 869

#查看進程樹 
[root@zls ~]# pstree

動態進程監控(top)

top前兩行內容解析

第一行內容:
        當前系統時間      服務器運行時間         有3個用戶在登陸        
top -   10:54:23            up 1 day, 17:56,   3 users,  

#平均負載(系統)     1分鐘   5分鐘      15分鐘
load average:                0.00,    0.01,       0.05

第二行內容:
總共122個任務        1個正在運行(R)   121個進入睡眠狀態的(S)      沒有中止(T)Tasks: 122 total,     1 running,             121 sleeping,          0 stopped, 
0個殭屍進程(Z)
0 zombie

第三行內容

用戶態   內核態   優先級    空閒    等待(wait)     硬中斷     軟中斷  %Cpu(s):  0.1 us,  0.1 sy,   0.0 ni, 99.8 id,  0.0 wa,       0.0 hi,    0.0 si,
虛擬機佔用物理機CPU的百分比
0.0 st

第四行:內存

KiB Mem :  2028116 total,   150780 free,   144108 used,  1733228 buff/cache

第五行:swap虛擬內存

KiB Swap:  2097148 total,  2097148 free,        0 used.  1645080 avail Mem

第六行

PID   USER    PR  NI    VIRT      RES       SHR    S      %CPU      %MEM     
進程號  用戶    優先級   虛擬內存 物理內存 共享內存  狀態  佔CPU百分比 佔內存百分比
TIME+    COMMAND 
運行時間  進程的運行命令

中斷:硬中斷

中斷是系統用來影響硬件設備請求的一種機制,它會打斷進程的正常調度和執行,而後調用內核中的終端處理程序來影響設備的請求。ssh

軟中斷:

事實上,爲了解決中斷處理程序執行過長的和丟失中斷的問題,Linux將中斷處理過程分紅了兩個階段:
第一階段:用來快速處理(硬中斷)中斷,它在中斷禁止模式下運行,主要處理跟硬件緊密相關工做
第二階段:用來延遲處理第一階段未完成的工做,一般之內核線程的方式運行。操作系統

例如:線程

第一階段:當你接到第一個配送員電話時,你能夠跟他說,你已經知道了,其餘事見面再細說,而後就能夠掛斷電話了。

第二階段:纔是取外賣,而後見面聊發票的處理動做。

如此一來,第一個配送員不會在電話裏佔用你很長時間,第二個配送員來的時候,照樣能夠打通電話。

top命令的使用

[root@zls ~]# top
#指定N秒變化時間
[root@zls ~]# top -d 1
#查看指定進程的動態信息
[root@zls ~]# top -d 1 -p 10126
[root@zls ~]# top -d 1 -p 10126,1
#查看指定用戶的進程
[root@zls ~]# top -d 1 -u apache
#將 2 次 top 信息寫入到文件
[root@zls ~]# top -d 1 -b -n 2 > top.txt

top 常見指令
h   查看幫出
z   高亮顯示
1   顯示全部CPU的負載
s   設置刷新時間
b   高亮現實處於R狀態的進程
M   按內存使用百分比排序輸出
P   按CPU使用百分比排序輸出
R   對排序進行反轉
f   自定義顯示字段
k   kill掉指定PID進程
W   保存top環境設置 ~/.toprc
q   退出

信號管理進程(kill)

當程序運行爲進程後,若是但願強行中止就可使用kill命令對進程發送關閉信號,除了kill還有pkill、killall

定義守護進程的角色
結束用戶會話和進程

[root@zls ~]# kill -l //列出全部支持的信號

//常見信號列表:
數字信號        信號別名        做用
1       HUP     掛起信號,每每可讓進程從新配置
2       INT     中斷信號,起到結束進程的做用,和ctrl + c 的做用同樣
3       QUIT        讓進程退出,結果是進程退出
9       KILL        直接結束進程,不能被進程捕獲
15      TERM        進程終止,這是默認信號
18      CONT        被暫停的進程將繼續恢復運行
19      STOP        暫停進程
20      TSTP        用戶中止請求,做用相似於ctrl + z 把進程放到後臺並暫停

kill命令發送指令

// 給 vsftpd 進程發送信號 1,15
[root@zls ~]# yum -y install vsftpd
[root@zls ~]# systemctl start vsftpd
//發送重啓信號,例如 vsftpd 的配置文件發生改變,但願從新加載
[root@zls ~]# kill -1 9160
//發送中止信號,vsftpd 服務有中止的腳本 systemctl stop vsftpd
[root@zls ~]# kill 9160

// 給vim進程發送信號 9,15
[root@zls ~]# touch file1 file2 
//使用遠程終端1打開file1
[root@zls ~]# tty
/dev/pts/1
[root@zls ~]# vim file1
//使用遠程終端2打開file2
[root@zls ~]# tty 
/dev/pts/2
[root@zls ~]# vim file2
//查看當前進程pid
[root@zls ~]# 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
//發送15信號
[root@zls ~]# kill 4362
//發送9信號
[root@zls ~]# kill -9 4363
//還能夠同時給全部vim進程發送信號, 模糊匹配,同時給多個進程發送信號
[root@zls ~]# killall vim

//使用pkill踢出從遠程登陸到本機的用戶, pkill  相似killall
[root@zls ~]# w
 20:50:17 up 95 days,  9:30,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
xuliangw pts/0    115.175.115.39   20:22    0.00s  0.01s  0.00s sshd: zls [priv]

//終止 pts/0上全部進程, 除了bash自己
[root@zls ~]# pkill -t pts/0
//終止pts/0上全部進程, 而且bash也結束(用戶被強制退出)
[root@zls ~]# pkill -9 -t pts/0

//列出zls用戶的全部進程,-l輸出pid
[root@linux-zls ~]# pgrep -l -u zls
32206 sshd
32207 bash
相關文章
相關標籤/搜索