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 //升序排列
2 以CPU佔比降序排列------>%cpu
#ps aux --sort -%cpu | less //-%cpu 降序排列
3 以內存佔比升序排列------>%mem
#ps aux --sort %mem | less
4 以內存佔比降序排列------>%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
[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@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