Linux進程管理-初級
背景:
在學習完Linux進程管理后,發現這一塊的知識點比較多,很多都是自己以前沒有接觸過的,而且這部分知識對今后的工作有很大幫助,在這里做個學習的總結,供以后復習。
進程介紹:
什么是進程
進程(Process):運行中的程序的一個副本,是被載入內存的一個指令集合,進程有進程ID(Process ID,PID),用來標記每個進程,UID、GID和SELinux語境決定對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承,進程是存在生命周期的。
Linux系統中 init(CentOS7名字發生了變化) 是系統的第一個進程,進程都是由父進程創建,他們之間是父子關系
進程優先級
進程優先級分為系統優先級、實時優先級和nice值
系統優先級:數組越小優先級越高,CentOS4、5是從0-139,一共140個優先級;CentOS6、7是從0-98,99,一共100個優先級
實時優先級:從99-0,值越大優先級越高
nice值是從-20到19,對應系統優先級100-139或99
進程狀態
進程類型:
進程分為守護進程:daemon,在系統引導過程中啟動的進程,和終端無關進程
前臺進程:跟終端相關,通過終端啟動的進程
這兩者是可以相互轉化的
進程狀態:
R :運行態:running
就緒態:ready
睡眠態:
S 可中斷:interruptable
D 不可中斷:uninterruptable
T 停止態:stopped,暫停于內存,但不會被調度,除非手動啟動
Z 僵死態:zombie,指子進程退出時,父進程并未對其發出的SIGCHILD信號進行適當處理,導致子進程停留在僵死狀態等待其父進程為其收尸,這個狀態下的子進程就是僵死進程。
+:前臺進程
l:多線程進程
L:內存分頁并帶鎖
N:低優先級進程
<:高優先級進程
s:session leader,會話(子進程)發起者
ps命令:
查看進程命令:ps
ps 支持三種選項:
UNIX選項: 如-A -e
BSD選項: 如a
GNU選項: 如–help
ps選項:默認是顯示當前終端中的進程
a 所有終端中的進程
x 不鏈接終端的進程
u 顯示進程所有者的信息
f 顯示進程的父進程
k|–sort 對屬性排序
o 顯示定制的信息 (包括:pid、comm、%cpu、%mem、state、tty、euser進程發起者、ruser真正執行者等)
例子1:
![]()
例子2:
![]()
最靈活使用:ps 選項 | 其他命令 (通過管道多查到的進程在篩選,如:ps aux | grep httpd)
pgrep命令:
pgrep [options] pattern
選項:
-u uid:effective user,生效者
-U uid:real user,真正發起運行命令者
-t terminal:與指定終端相關的進程
-l :顯示進程名
-a :顯示完整格式的進程名
-P pid:顯示指定進程的子進程
查看具體某個進程的進程id
pidof命令:
pidof bashname
例子:我在一個終端執行ping命令
![]()
在另一個終端用pidof查看ping進程對應的進程id
![]()
進程管理工具-top
直接使用top命令
![]()
在進入top后可以按P(占據cpu百分比排序)、M(占據內存百分比排序)、T(占據cpu時長)來按不同類型排序,默認是按cpu排序顯示。
top選項
-d #:指定刷新時間,默認是3秒
-b:顯示所有進程
-n:刷新多少次后退出
kill 命令
向進程發送控制信號可以對進程進行管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫
顯示當前系統可用信號用命令:kill -l 或者 trap -l
這里例舉幾個常用的信號:
1)SIGHUP:無需關閉進程,讓其重讀配置文件
2)SIGINT :中止正在運行的進程,相當于Ctrl+c
3)SIGQUIT:相當于Ctrl+\
9)SIGKILL :強制殺死正在運行的進程,可將用戶踢出系統
15)SIGTREM :終止正在運行的進程(比較溫柔的殺死進程,有些進程是它無法殺掉的,需要用9)
18)SIGCONT:繼續運行
19)SIGSTOP:后臺休眠
按PID發生信號:kill [-SIGNAL] pid …
例子:我們用一個終端來執行ping命令,ping命令是前臺執行的進程,我們在另一個終端讓它后臺運行,在讓它回到前臺。
![]()
![]()
![]()
![]()
這時可以用kill -15 2591 來殺死進程,也可以讓它變成前臺運行,用Ctrl+c結束,命令:先用jobs命令查看在工作的進程,找到ping對應的job號,用fg命令讓它處于前臺執行。
![]()
![]()
按名稱發信號:killall [-SIGNAL] comm…
按模式發信號:pkill [optins] pattern
-SIGNAL
-u uid:effective user,生效者
-U uid:real user,真正發起運行命令者
-t terminal:與指定終端相關的進程
-l:顯示進程名(pgrep可用)
-a:顯示完整格式的進程名(pgrep可用)
-P pid:顯示指定進程的子進程
如果你想在執行命令就讓他處于后臺運行,可以在命令后面加上&符號
![]()
以上都是進程和進程管理的初步應用,更深層次的使用需要結合實際運用來使用。
原創文章,作者:657188918,如若轉載,請注明出處:http://www.www58058.com/85372