(六)linux中的进程管理
linux中的進程管理
- 一、進程和線程
- 1、進程
- 2、線程
- 二、進程查看命令(man ps)
- 1、圖形查看進程
- 2、ps命令(用來查看進程信息)
- 1、bsd風格
- 2、unix風格
- 3、gun風格
- 3、pgrep和pidof 命令的用法
- 4、top 動態(tài)進程查看
- 三、系統(tǒng)優(yōu)先級
- 四、進程前后臺調用
- 五、進程信息號
- 六、守護進程
- 1、設定實驗環(huán)境
- 2、利用守護進程控制服務
- 七、系統(tǒng)登錄審計體系
- 1、w ??顯示正在登陸系統(tǒng)的賬號
- 2、last ??登陸成功現(xiàn)在已經退出的
- 3、lastb ??試圖登陸但未成功
一、進程和線程
1、進程
程序是靜態(tài)的代碼文件;進程是指程序運行時的形態(tài)
進程是程序的一個副本(復制程序到內存,相當于副本)
進程是有生命周期的
? ? 準備期:準備資源(類似于執(zhí)行“打掃教室任務”前,“拿掃把”)
? ? 運行期:執(zhí)行過程
? ? 終止期:執(zhí)行后程序所占用的系統(tǒng)資源被回收
程序存在硬盤上,硬盤中的內容要先放到內存中進行緩存,才能被cpu讀到,之后才能進行相應運算。
同樣的,在內存中計算出的結果,要放到硬盤中進行永久保存。
2、線程
進程是資源調用的最小單位
線程是進程的最小單位
程序執(zhí)行流是從上倒下貫穿運行的
當進程是多任務物,cpu是多核心,多任務應該同時被每個核心處理,每個核心處理的任務叫線程
線程資源是共享的。
進程狀態(tài)
? ? R(TASK_RUNNING) ? 可執(zhí)行態(tài)(running,ready):正在被cpu處理,或已經加載好等待被cpu處理
? ? S(TASK_INTRRUPTABLE) ? 可喚醒休眠:使用cpu超時,進入休眠,再次使用時需要被激活
? ? D(TASK_UNINTRRUPTABLE) ? 不可喚醒休眠:使用cpu超時,仍有資源沒有被加載好,不可以使用cpu,等待加載的時間段就是不可喚醒狀態(tài)。
? ? T(TASK_STOP) ? 暫停狀態(tài):暫停狀態(tài)都是人為的在操作,人為的把一個程序暫停,關閉無法使用或暫時不需要的程序,可以人為喚醒
? ? Z(EXIT_ZOMBLE) ? 僵死態(tài):**進程已經結束,卻占用資源不放,需要手動結束程序。**這是一種“bug”、是系統(tǒng)的漏洞。
二、進程查看命令(man ps)
1、圖形查看進程
方法一:gnome-system monitor gnome:圖形界面
方法二:或者在有圖形的情況下,選擇utilities-system monitor
但是在企業(yè)中一般不用。
2、ps命令(用來查看進程信息)
ps命令也是用來查看進程信息的,但不該命令不依賴于圖形。在文本界面下就可以顯示進程信息。
命令的三種執(zhí)行風格 unix bsd GNU
所謂執(zhí)行風格,就是一種書寫規(guī)范:
Unix風格的參數(shù),前面加單破折線;
BSD風格的參數(shù),前面不加破折線;
GNU風格的長參數(shù),前面加雙破折線。
1、bsd風格
| x | 與終端無關相關的進程 |
| u | 用戶信息歸類的查看方式 |
| f | 進程層級關系 |
| o | 顯示指定參數(shù)( pid comm nice pri pcpu ppid stat,user,group等) |
(1)ps #a 與終端相關的進程(當用戶登陸系統(tǒng)后產生的進程都是帶終端的)
我們可以看到tty這一列有三種tty1,tty1,pts/0,
先說pts/0吧,man里面是這樣說的:ptmx and pts - pseudo-terminal master and slave,pts是所謂的偽終端或虛擬終端 (虛擬終端(VT)是一種提供類似于Internet的Telnet協(xié)議的遠程終端仿真的國際標準化組織(ISO)協(xié)議。在遠程終端的用戶,可以在遠程計算機上運行應用程序,就象他們是坐在這臺計算機前面一樣)。
具體表現(xiàn)就是你打開一個終端,這個終端就叫pts/0,如果你再打開一個終端,這個新的終端就叫pts /1,依此類推。
tty:終端設備的統(tǒng)稱。
?
tty一詞源于Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱讀和發(fā)送信息的東西,后來這東西被鍵盤與顯示器取代,所以現(xiàn)在叫終端比較合適。終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。
?
tty1~6是文本型控制臺,tty7是X Window圖形顯示管理器。
ps ax顯示信息如下:
#PID ? ? ???進程id(進程的唯一標識)
#TTY ? ?? ?進程用到的終端
#STAT ? ?? 進程狀態(tài)
#TIME ? ? ?進程占用cpu時長
#COMMAND ? 進程名稱
(2)ps #x 與終端無關相關的進程
當然ps -ax可以組合使用。
(3)ps u 用戶信息歸類的查看方式
#ps aux顯示信息如下:
#USER ? ? ??進程所有人
#PID ? ? ??進程id
#%CPU? ???進程使用cpu的用量
#%MEM ? ? 進程所用到的內存用量
#VSZ ? ? ??進程使用的虛擬內存大小,(進程在內存中的大小,以千字節(jié)(KB)為單位)
#RSS ? ? ??進程常駐內存中的數(shù)據(jù)大小,(進程在未換出時占用的物理內存)
#TTY ? ? ??進程用到的終端
#STAT? ? ?? 進程狀態(tài)
#START ? ? ??進程運行時長
#TIME ? ? ????進程占用cpu時長
#COMMAND ? ? ??進程名稱
(4)ps f 進程層級關系
(5)ps o user,pid,gid等 (顯示指定參數(shù))
2、unix風格
| -f | 顯示信息的完整格式 |
| -H | 顯示進程的層級結構 |
| -o | 顯示指定參數(shù) |
| –sort= |
(1)、ps -e顯示所有進程
等同于ps ax
(2)、ps -f 顯示信息的完整格式
可以看到后面的參數(shù)
(3)、ps -H 顯示進程的層級結構
(4)、ps -o 顯示指定參數(shù)(和ps o 一樣)
(5)、–sort=
ps -eo %cpu --sort=%cpu 正序排列
ps -eo %cpu --sort=-%cpu 倒序排列
(6)、ps -l 查看自己bash進程
3、gun風格
3、pgrep和pidof 命令的用法
(1)、pgrep命令
pgrep命令以名稱為依據(jù)從運行進程隊列中查找進程,并顯示查找到的進程id。
通過程序的名字來查詢進程的工具,一般是用來判斷程序是否正在運行。
| -U user | 顯示指定用戶進程 |
| -t tty | 顯示指定終端進程 |
| -l | 返回進程ID同時顯示進程名 |
| -a | 顯示進程的完整名稱 |
| -P pid | 進程的子進程 |
(1)、-u uid 顯示指定用戶進程
進入westos用戶后 打開兩個shell
(2)、-U user | 顯示指定用戶進程
(3)、-t tty |顯示指定終端進程
(4)、-a | 顯示進程的完整名稱
注意:關于pgrep的命令,一定要牢記此命令是通過進程名稱來查詢進程的工具,一般是用來判斷程序是否正在運行。
所以除了-u和-U后面跟的是用戶名稱或uid;
其他的參數(shù)都是跟進程名稱,比如:
(2)、pidof 命令
根據(jù)進程名稱來查看進程id。
4、top 動態(tài)進程查看
(1)、#top -
#09:48:51 ? ?? ? 系統(tǒng)時間
#up 18:54 ? ? ? ?運行時長
#2 users ? ?? ?系統(tǒng)中有兩個用戶登陸
#load average: 0.75, 0.53, 0 ? ?Load Average 就是一段時間 (1 分鐘、5分鐘、15分鐘) 內平均 等待時長就是進程等待被cpu處理的時間。
(2)、#Tasks:
#331 total ? ? 任務總量
#3 running? ? ?正在運行
#329 sleeping? ?休眠人物數(shù)量
#0 stopped? ?被暫停數(shù)量
#0 zombie? ?僵死人物數(shù)量
(3)、#%Cpu(s)
#1.5 us ? ? 用戶空間
#1.9 sy ? ?內核空間
#0.0 ni ? ?nice值調整時間
#58.9 id ? ? 空閑時間
#0.0 wa? ?等待io時間
#2.1 hi? ?處理硬件中斷時間
#0.2 si處? ?理軟件中斷時間
#0.0 st被偷走的時間(vm使用時間)
(4)、#MiB Mem :
#7664.6 total ? ? 總量
#5383.9 free ? ?空閑
#1312.1 used ? ? 占用
#968.8 buff/cache ? ?緩存
從硬盤里面加載數(shù)據(jù)到內存,這種數(shù)據(jù)叫緩沖 (buff)
將要從內存到硬盤中的數(shù)據(jù) 叫緩存。
(5)、MiB Swap: 交換分區(qū)用量
交換分區(qū)在硬盤上。
#PID? ?進程id
#USER? ?進程所有者的用戶名
#PR? ?優(yōu)先級
#NI? ? nice值。負值表示高優(yōu)先級,正值表示低優(yōu)先級
#VIRT? ?進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
#RES? ?進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
#SHR? ?共享內存大小,單位kb
#S? ?進程狀態(tài)(D=不可中斷的睡眠狀態(tài),R=運行,S=睡眠,T=跟蹤/停止,Z=僵尸進程)
#%CPU? ?上次更新到現(xiàn)在的CPU時間占用百分比
#%MEM? ?進程使用的物理內存百分比
#TIME+? ?進程使用的CPU時間總計,單位1/100秒
#COMMAND? ?命令名/命令行
(6)、top命令的參數(shù)
| -b | 以批次方式顯示 這個得和d、n搭配使用,他是按批次顯示 每三秒都是開一個新的靜態(tài)top 一直往下走 |
| -n | 指定顯示的批次數(shù)量 比如top -n 2 顯示兩次以后就停止 |
(7)、top內部指令
#P ? ?排序
#M ? ?內存排序
#T ? ?累計展銅cpu時間排序
#l ? ?關閉/開啟uptime信息
#t ? ?關閉/開啟cpu&task
#s ? ?指定刷新頻率
#k ? ?操作進程
#u ? ?查看指定用戶進程
三、系統(tǒng)優(yōu)先級
系統(tǒng)時多任務多用戶的操作模式
任務的重要性是有區(qū)分的
如何確定任務的重要性
---->使用“優(yōu)先級”
范圍: 0–139
內核自控優(yōu)先級范圍:0-99
所以用戶可控優(yōu)先級:100-139
nice:-20-19
普通用戶只能調低自己的優(yōu)先級而不能調高。
所謂nice值,就是我們的用戶發(fā)揚風格,把自己能夠使用到的系統(tǒng)資源調低,使別人能夠運行的更快。
nice值越負,優(yōu)先級越高。所以普通用戶只能把自己的nice值調大。
(1)更改進程nice值
renice -n -5 43331 ##更改優(yōu)先級
nice -n -5 cat ##指定優(yōu)先級打開進程
S ? ?#sleeping
< ? ?#優(yōu)先級高
s ? ? #頂級進程
T ? ?#stop(當前狀態(tài)是一個暫停狀態(tài))
N ? ?#優(yōu)先級低
R ? ?#running
‘+’ ? ?#運行在前臺
那為什么cat后面沒有顯示小s?因為他是某一個程序的子進程。
(2)、kill進程
(3)、開啟進程并指定其優(yōu)先級
nice -n -5 cat &
在開啟程序時就指定它的優(yōu)先級。后臺運行。
四、進程前后臺調用
有些進程在使用的時候,是占用系統(tǒng)終端的一個狀態(tài)。比如:gedit
此時,系統(tǒng)終端已經不能在和我們進行正常交流,那如何解決?
涉及到的命令:
ctrl+z? ##把占用shell的進程打入后臺掛起
bg ? ? ##把后臺掛起的進程運行起來
fg ? ? ##把后臺進程調回前臺
&? ? ##運行進程在后臺
jobs ? ##查看當前shell中在后臺的所有工作
(1)、ctrl+z 把占用shell的進程打入后臺掛起
會顯示stopped 暫停狀態(tài)。
后面的”+“表示,我在操作的過程中,默認就是使用這條命令。
后面的”-“表示,稍后要處理的進程
(2)、fg 把后臺進程調回前臺
把(1)中的進程打入后臺掛起以后,就不能在操作gedit頁面。如何解決?使用fg。
輸入fg,就是帶”+“的被調回前臺。
輸入fg 【num】(jobs中的數(shù)字)就是調用指定進程進入前臺。
(3)、bg 使進程在后臺運行
問題:能讓cat在后臺自動運行起來嗎?
cat在后臺運行的時候 會自動進入到暫停狀態(tài)
因為cat需要有字符的輸入才能生效,cat在開啟的時候需要開啟自己的工作界面,如果不具備這樣的界面控制能力的話,證明他的資源是缺失的。
如下圖可知,cat確實在后臺運行的過程,但是運行完畢以后又立即被系統(tǒng)停止了。
同理,vim也和cat一樣,也需要一個自己的工作界面。
(4)、& 直接使進程在后臺開啟。
這樣可以正常和系統(tǒng)終端交流
(5)、結束在后臺的進程
fg 把它調回前臺,使用完畢以后 正常結束掉
比如vim
cat的話 ctrl+c 結束掉也可以
或者kill -9 【num】 (num是jobs中的編號)
五、進程信息號
引言:
對進程的處理,就是對內核進行控制。
操作者要使用信號對內核進行溝通,讓他對相應的進程進行處理。
內核也用信號對進程進行溝通,把數(shù)字傳遞給進程以后,讓進程自己去處理。
(1)、man 7 signal 查看進程信息號
(2)、進程信號
1 ? ?#重新家在系統(tǒng)配置文件(source)
2 ? ?#清空內存中的進程數(shù)據(jù)
3 ? ?#清空內存中的鼠標(ctrl+)
9 ? ?#強行結束進程(不能被阻塞)
15 ? ?#正常關閉進程(會被阻塞)
18? ? #運行被暫停的進程
19 ? ?#暫停進程(不會被阻塞)
20? ? #暫停進程(會被阻塞的)
(3)、實驗部分:
①kill -2
第一行的字母我們不要的話可以使用ctrl+c 推出
實際上使用kill -2 就是ctrl+c
②kill -15正常關閉進程
在shell中開啟子進程,使用-15并不會關掉前面那個shell,
這是因為命令被系統(tǒng)阻塞掉了,因為系統(tǒng)認為做了這樣的操作以后會對系統(tǒng)造成不良影響。
當然也可以使用kill -9 強制關閉。
③19 #暫停進程(不會被阻塞)
?20 #暫停進程(會被阻塞的)
4658的shell 已經不能正常交互
只有kill -18 4658 運行之后 才能交互
kill -20 會被阻塞
2、進程信號控制工具
kill ?進程信號 pid
killall ?進程信號 進程名字
pkill ?進程信號 進程條件
kill不做過多解釋。
(1)、kill all 進程信號 進程名字
當shell中后臺開啟多個vim,怎么才能一次性把這些vim都關掉。
(2)、pkill ?進程信號 進程條件
經常使用 pkill -U 進程信號 進程條件
就是關閉指定用戶進程
進程信號可以在pkill --help中參考。
六、守護進程
把程序的管理權交給某一個進程,從而分擔內核的壓力。
而這個進程,我們就可以把他稱作守護進程。
守護進程:替內核分擔程序控管的程序
#通常pid為1
就是上圖所示的systemd
systemd -----> systemctl
Systemd(系統(tǒng)管理守護進程)
systemctl命令 (系統(tǒng)管理服務) systemd這個啟動服務的機制,主要通過systemctl這個命令來完成。
1、設定實驗環(huán)境
我們的主機位置是172.25.254.50
所以設定另一臺主機(虛擬機)的設備是172.25.254.150
對虛擬機網絡進行配置,為接下來的操作做準備。
2、利用守護進程控制服務
所謂服務,就是對操作者以外的人是有意義的。
比如,上課用的遠程連接服務,對老師是沒有意義的,但是對于上視頻課的人是有意義的。
這種雷鋒程序,就叫服務。
#systemd -----> systemctl
#systemctl 管理系統(tǒng)服務
#服務指在系統(tǒng)中開啟的共享系統(tǒng)資源到網絡中的程序
(1)、status ##查看狀態(tài)
(2)、stop ##關閉
(3)、start ##開啟
(4)、restart ##重新啟動服務
相當于先stop再start
為什么要重啟,因為如果對程序做了相應的設定,那目前為止是不生效的,只有重啟之后才生效。
重啟之后 。main pid會發(fā)生變化。
(5)、reload ##重新加載
在配置進程以后,不關閉進程,而是直接加載。
有的進程支持,有的進程不支持。
比如ssh就不支持。
而httpd就支持,這是服務本身決定的。
(6)、enable
enable ##設定服務開機啟動
enable --now ##設定服務開機啟動并當前開啟服務
disable ##設定服務開啟不其動
只使用disable,當前還是running狀態(tài)
使用了disable --now 就關閉了
使用systemctl enable sshd 就是設置其開機啟動。
(7)、list-units ##查看系統(tǒng)所有服務當前狀態(tài)
(8)、list-unit-files ##查看服務開機狀態(tài)
圖中,static表示的是固定的,不需要去管,這種服務通常都是其他服務運行的依賴性。
(9)、list-dependencies ##列出服務依賴性
就是我們再開啟一個服務的時候,另一個服務會因為當前服務的開啟而自動打開,不需要人為進行管理。
(10)、mask ##凍結服務
????unmask ##解鎖
之前我們可以使用stop和start進行開啟關閉服務
在凍結之后,stop和start就不再起作用。
(11)、 set-default ##設定系統(tǒng)運行模式
set-default multi-user.target 無圖形網絡模式
set-default graphical.target 有圖形的網絡模式
get-default ##查看系統(tǒng)運行模式
##系統(tǒng)運行模式
#0-6
#0?? POWEROFF(關機)
#1?? single
#2 ??noG+NETWORK
#3
#4
#5 ??G+NETWORK
#6?? REBOOT(重啟)(調用命令 init 6)
無圖形的網絡模式就是黑的界面。運行速度會更快。
七、系統(tǒng)登錄審計體系
1、w ??顯示正在登陸系統(tǒng)的賬號
w ?? 顯示正在登陸系統(tǒng)的賬號
w -i ?? 顯示登陸來源
上面兩個命令顯示的其實是/var/run/utmp 這個文件,這兩個文件不能使用cat進行查看。
此時主機也顯示連接到了 當前虛擬主機上。
2、last ??登陸成功現(xiàn)在已經退出的
last ##登陸成功現(xiàn)在已經退出的
該命令查看的是 /var/log/wtmp這個文件
真機退出連接后,圖上圖所示
3、lastb ??試圖登陸但未成功
lastb ##試圖登陸但未成功
該命令查看的是/var/log/btmp這個文件
真機顯示連接時密碼錯誤
虛擬主機就會顯示登陸失敗的主機:
總結
以上是生活随笔為你收集整理的(六)linux中的进程管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7设置键盘类型_CentOS
- 下一篇: pci-e串口卡linux 驱动下载,P