進程管理

簡述進程的相關理論與工具使用

進程管理

(一)進程的介紹

程序工作的過程就是進程。我們通過一個圖解釋程序運行的過程:

圖片1

解釋:假如有一臺電腦,在硬盤中有一個程序,當程序運行時,程序中的數據就會從硬盤讀取到內存中,并在內存中開辟一個空間給程序運行。假如用戶再開一個終端運行程序,內存

就會分配第二塊空間給程序運行,進程是程序的實體。進程的特點:

  • 當我們運行程序時,系統會給程序分配一個進程編號,即進程ID。如果運行ps aux會看到很多的進程在運行。在windows系統中,輸入快捷鍵win+r就會看到任務管理器中顯示的windows正在運行的各個進程,它們有進程編號PID。
  • 進程有生命周期,當程序結束運行時,內存中的進程也會消失。
  • 進程有父進程與子進程之分,當父進程結束或被殺死時,子進程也不能繼續運行。運行pstree可以查看所有的父進程及其子進程。Centos7以前的版本,系統的第一個進程是init進程,但centos7以及centos7后的版本是systemd。

圖片2圖片12

 

  • 當子進程不運行時,子進程與父進程在同一個內存空間,當子進程發生更改時,內存就會給它分配一個獨立的空間供其使用。
  • 進程的優先級。Linux進程通常優先級分為:

系統優先級:早期centos系統優先級的范圍為0-139,centos6以下為0-98。系統優先級的數字越小,優先級越高,就先運行,但并不是誰的優先級高,誰運行的就快。

實時優先級:與系統優先級相反,范圍為99-0,值越大優先級越高。它是固定不變的

nice值:-20到19,對就系統優先級100-139或99,是動態的,可變的

圖片3

UID:代表執行者的身份

PID:代表這個進程的代號

PPID:代表這個進程是由哪個進程發展衍生而來的,亦即父進程的代號

PRI:代表這個進程的nice值

NI:代表這個進程的nice值

所謂nice值,即表示進程可被執行的優先級的修正數值。PRI值越小越先執行,加入nice值后,將會使得PRI變為:PRI(new)=PRI(old)+nice。這樣,當nice值為負值時,該進程的優先級值將變小,其越快被執行。

關于優先級的圖解:

圖片4

Windows也有優先級,如圖可知,共有六種。

圖片5

 

補充:誰有權力運行程序,不是程序決定的,而是由程序的權限決定的,程序的UID、GID和SELinux語境決定對文件系統的存取和訪問權限。

進程相關概念:

進程內存:

Page Frame:頁框,用存儲頁面數據,存儲Page 4k

LRU: Least Recently Used 近期最小使用算法,釋放內存物理地址空間和線性地址空間

圖片6

原理解釋:因為假設物理塊有3個,所以最多只能存3個數據,超過就會將數據存到磁盤中。從第2輪開始,3調入之后3在上,4調入之后,4又重新跑到上面,以此規律類推。

MMU:Memory Management Unit負責轉換線性和物理地址

TLB:Translation Lookaside Buffer翻譯后備緩沖器,用于保存虛擬地址和物理地址映射關系的緩存。

進程狀態:

Linux內核:搶占式多任務

進程類型:

守護進程:daemon,在系統引導過程中啟動的進程,和終端無關進程,在計算機加載的時候,自動進入到后臺運行。

前臺進程:跟終端相關,通過終端啟動的進程,關掉終端,進程也會關閉。

注意:兩者可相互轉化

進程狀態:

運行態:running

就緒態:ready

睡眠態:

可中斷:interruptable

不可中斷:uninterruptable

停止態:stopped,暫停于內存,但不會被調度,除非手動啟動

僵死態:zombie,結束進程,父進程結束前,子進程不關閉,表示其本進程或父進程非正常關閉,這樣的進程占用內存資源,且無法在復活。

 

當遇到多個任務要運行時,如果一個父進程不能用,就會出線多個線性進程來運行多個任務,進程是線程的容器。每個線程都是獨立的進程。

 

在/proc目錄下,每個數字代表一個進程

圖片7

查看進程:ps

支持三種選項:

UNIX選項 如-A -e

BSD選項 如a

GNU選項 如–help

選項:默認顯示當前終端中的進程:

a 選項包括所有終端中的進程

x 選項包括不鏈接終端的進程

u 選項顯示進程所有者的信息

f 選項顯示進程的父進程

k|–sort 屬性 對屬性排序

o 屬性…選項顯示定制的信息

進程管理常用的命令:

pgrep 是通過程序的名字來查詢進程的工具,一般是用來判斷程序是否正在運行。在服務器的配置和管理中,這個工具常被應用。

常用參數:

-l ?列出程序名和進程ID

-o ?進程起始的ID

-n ?進程終止的ID

例:

1)默認只顯示ID

[root@localhost misc]# pgrep ssh

976

11241

2)同時顯示PID和ProcessName

[root@localhost misc]# pgrep -l ssh

976 sshd

11241 sshd

3)按優先級的關系,顯示最小的進程

[root@localhost misc]# pgrep -l -o ssh

976 sshd

4)按優先級的關系,顯示最大的進程

[root@localhost misc]# pgrep -l -n ssh

11241 sshd

ps 可以對系統進程監測控制。Ps是顯示瞬間行程的狀態,并不動態連續;如果想對進程運行時間監控,應該用top工具。

命令參數:

-A 顯示所有進程(等價于-e)(utility)
-a 顯示一個終端的所有進程,除了會話引線
-N 忽略選擇。
-d 顯示所有進程,但省略所有的會話引線(utility)
-x 顯示沒有控制終端的進程,同時顯示各個命令的具體路徑。dx不可合用。(utility)
-p pid 進程使用cpu的時間
-u uid or username 選擇有效的用戶id或者是用戶名
-g gid or groupname 顯示組的所有進程。
U username 顯示該用戶下的所有進程,且顯示各個命令的詳細路徑。如:ps U zhang;(utility)
-f 全部列出,通常和其他選項聯用。如:ps -fa or ps -fx and so on.
-l 長格式(有F,wchan,C 等字段)
-j 作業格式
-o 用戶自定義格式。
v 以虛擬存儲器格式顯示
s 以信號格式顯示
-m 顯示所有的線程
-H 顯示進程的層次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后顯示環境(如:ps -d e; ps -a e)(utility)
h 不顯示第一行

例:

圖片8

標頭解釋:

USER ???用戶名

PID ????進程ID(Process ID)

%CPU ??進程的cpu占用率

%MEM ?進程的內存占用率

VSZ ????進程所使用的虛擬內存的大?。╒irtual Size)

RSS ????進程使用的駐留集大小或者是實際內存的大小,Kbytes字節

TTY ????與進程關聯的終端(tty)

STAT ???進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)

R ??運行 Runnable(on run queue)正在運行或在運行隊列中等待

S ??睡眠 Sleeping ?休眠中,受阻,在等待某個條件的形成或接受到信號

I ???空閑 Idle

Z ??僵死 ?Zombie(a defunct process) 進程已經終止,但進程描述符存在,直到父進程調用wait4()系統調用后釋放。

D ??不可中斷 ?收到信號不喚醒和不可運行,進程必須等待直到有中斷發生。

T ???終止 ?Terminate

P ???等待交換頁

W ??無駐留頁

X ???死掉的進程

< ???高優先級進程

N ???低優先級進程

L ????內存鎖頁 ?Lock

s ????進程的領導者(在它之下有子進程)

START ????進程啟動時間和日期

TIME ?????進程使用的總cpu時間

COMMAND 正在執行的命令行命令

pstree命令以樹狀圖顯示進程間的關系。

tty/who/w:

圖片9

tty: 用來查詢目前使用的終端機的文件名稱

who: 用來顯示系統中有哪些使用者,及其終端

w: 用來顯示目前登入系統的用戶信息

kill/pkill

kill用于終止指定的進程的運行,也可以用kill向進程發送特定的信號。

參數:

-l 信號,如果不加信號的編號參數,則使用“-l”參數會列出全部的信號名稱

-a 當處理當前進程時,不限制命令名和進程號的對應關系

-p 指定kill命令只打印相關進程的進程號,而不發送任何信號

-s 指定發送信號

-u 指定用戶

實例:

1)列出所有信號名稱

[root@localhost misc]# kill -l

1) SIGHUP ??????2) SIGINT ??????3) SIGQUIT ?????4) SIGILL ??????5) SIGTRAP

6) SIGABRT ?????7) SIGBUS ??????8) SIGFPE ??????9) SIGKILL ????10) SIGUSR1

11) SIGSEGV ????12) SIGUSR2 ????13) SIGPIPE ????14) SIGALRM ????15) SIGTERM

16) SIGSTKFLT ??17) SIGCHLD ????18) SIGCONT ????19) SIGSTOP ????20) SIGTSTP

21) SIGTTIN ????22) SIGTTOU ????23) SIGURG ?????24) SIGXCPU ????25) SIGXFSZ

26) SIGVTALRM ??27) SIGPROF ????28) SIGWINCH ???29) SIGIO ??????30) SIGPWR

31) SIGSYS ?????34) SIGRTMIN ???35) SIGRTMIN+1 ?36) SIGRTMIN+2 ?37) SIGRTMIN+3

38) SIGRTMIN+4 ?39) SIGRTMIN+5 ?40) SIGRTMIN+6 ?41) SIGRTMIN+7 ?42) SIGRTMIN+8

43) SIGRTMIN+9 ?44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 ?56) SIGRTMAX-8 ?57) SIGRTMAX-7

58) SIGRTMAX-6 ?59) SIGRTMAX-5 ?60) SIGRTMAX-4 ?61) SIGRTMAX-3 ?62) SIGRTMAX-2

63) SIGRTMAX-1 ?64) SIGRTMAX

2)先用ps查找進程,然后用kill殺掉

[root@localhost misc]# ps -ef

[root@localhost misc]# kill 19220

  • 徹底殺死進程

[root@localhost misc]# kil -9 19220

前后臺的切換:

圖片10

pidof 用于查找一個運行的程序的PID

[root@localhost misc]# pidof ping

19375

Jobs顯示后臺任務信息

[root@localhost misc]# ping 172.17.0.1

[root@localhost misc]# jobs

[1]+ ?Running ????????????????ping 172.17.0.1 &

nohup使程序在后臺運行。

[root@localhos ??t misc]# nohup ping 172.17.0.1

renice: 進程優先級調整:

靜態優先級:100-139

進程默認啟動時的nice值為0,優先級為120

只有根用戶才能降低nice值(提高優先性)

圖片11

nice: 內核根據進程的nice值決定進程需要多少處理器時間,nice值的取值范圍是:-20到20。一個具有-20的nice值的進程有很高的優先級,一個nice值的為20的進程的優先級則很低。

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86655

(0)
xxcjxxcj
上一篇 2017-09-09 15:34
下一篇 2017-09-09 16:06

相關推薦

  • 第五周作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; 答:#egrp ‘^(root|fedora|user1)’ /etc/passwd | cut -f1,7 -d: 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 答:#egrp -o &…

    Linux干貨 2017-02-25
  • Ansible 詳細用法說明

    Ansible 一、概述 運維工具按需不需要有代理程序來劃分的話分兩類: agent(需要有代理工具):基于專用的agent程序完成管理功能,puppet, func, zabbix agentless(無須代理工具):基于ssh服務完成管理,ansible, fabric 二、簡介   Ansible是一個簡單的自動化運維管理工具,基于Python語言實現…

    2016-11-07
  • linux網絡管理

    Linux網絡配置 摘要:Linux 對網絡的管理分為 靜態指定和動態管理。 靜態指定 靜態指定ip一般有命令              ifconfig       &…

    Linux干貨 2016-04-05
  • linux中文本處理工具

      對于linux來講,文本處理是非常重要的,因為linux系統就是由無數的文件組成的,linux中一切皆文件。文件的處理方式有很多種,所以就有眾多的文本處理工具,各自作用于不同的文本處理方式。 一、查看文件命令:    cat命令:處理顯示文件內容,不改變原文件    cat命令常用于查看文件內容,也可通過…

    Linux干貨 2016-08-08
  • Linux-Centos7編譯內核

    編譯內核     前提:         (1)準備好開發環境         (2) 獲取目標主機上硬件設備的相關信息         (3) 獲取目標主機系統功能的相關信息       …

    2017-07-16
  • Linux shell之bash特性大全詳解(持續更新ing)

    一、shell是什么?     Shell本身是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋梁,用戶的大部分工作都是通過Shell完成的。Shell既是一種命令語言,又是一種程序設計語言。作為命令語言,它交互式地解釋和執行用戶輸入的命令;作為程序設計語言,它定義了各種變量和參數,并提供了許多在高級語言中…

    Linux干貨 2016-03-09
欧美性久久久久