日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux进程属主6,20150917 Linux进程查看与管理以及作业管理

發布時間:2023/12/2 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux进程属主6,20150917 Linux进程查看与管理以及作业管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一、基礎知識

MBR引導--內核--內核程序--》協調其它程序

一般內核運行在硬件之上,各應用也在硬件之前

1)OS的基本功能:文件系統、網絡功能、進程管理、內存管理、驅動程序、安全功能

以上為通用目的設置的程序。,

程序=指令+數據,

程序運行在內存當中。這個內存由物理內存映射邏輯空間

左則表示二個框分別表示指令和數據。物理內存劃分固定大小的頁框稱為pageframe。

右則下面的方框表示物理內存。每個進程在右則上面的方框中,這部分為假的內存

空間稱為線性地址空間。

2)CPU指令:? 四個級別ring0,ring1,ring2,ring3

ring0特權敏感指使,ring3環境中為普通指令加減乘除等

控制內存及磁盤數據讀取的為特權指令。

特權指令? :

普通指令

3)程序執行環境:

內核模式:運行內核級指令

用戶模式:運行普通指令

4)應用程序:

運行在內核代碼或應用程序代碼

運行普通指令:直接運行于CPU

運行特權指令:通過system call

5)內存:8bits, 1byte

32bit巡址空間s, 2^32, 0-2^32-1, 2^10*2^10*2^10*2^2 bytes =

2^10*2^10*2^2 kilo bytes = 2^10*2^2 MB = 4GB

64bits, 2^64, 4billions 4G

32位 4G: 1G, kernel ,每個應用程序假設自己擁有線性地址空間為4G地址空間

可用,包括自己以及系統內核。1G內核使用,3G為線性地址空間使用。

3G, app

6)ROM+RAM

ROM, RAM

7)地址空間:

物理地址空間

線性地址空間

8)IPC: Inter Process Communication

同一主機:

signal

semerphor

shm (shared memory)

不同主機:

rpc: remote procedure call

socket:

9) 進程調度:

進程運行程序,是程序的一部分

多任務:多進程同時運行

搶占式多任務

10)進程分類:

CPU bound: CPU密集型? (類似高清視頻)

I/O bound: IO密集型(編輯器等,頻繁IO操作)

11)進程優先級:

140:0-139

1-99:實時優先級,數字越大優先級越高

100-139:數字越小,優先級越高;

靜態優先級 (進程運行時默認自己擁有優先級)

動態優先級(進程運行時平衡優先級)

Linux準備140隊列,0優先級在0隊列中,1優先級在1隊列中

以此類推。當運行時從隊列首部開始,選擇優先級高的運行。如下圖:

每個進程運行的時間不同。Linux支持搶占式多任務,當一個

低先級的程序在運行,這時有一個高優先級的運行。過一段時間后

這里高優先級優先,提前運行。

算法時間復雜度:Big O (衡量標準算法)

O(1)??? 恒定的,無論優先級,消耗時間相同;(最好的)

O(logn)? 每次調度,調度程序需要從樹中找出優先級最高的進程

O(n)? 線性的

O(n^2)? 拋物線機制

O(2^n)? 隨隊列深度增長

12)進程創建:

請求發出者:進程? (由fork進行創建,為系統調用)

任何子進程parent—>為子進行發起一個fork調用—>child

這里child(task struct)與父進行相同。包括進程ID,父進程ID

進程:fork(), clone()

兩者的虛擬空間不同,但其對應的物理空間是同一個

示例:父進程P1創建P2子程序,

復制P1的正文段,數據段,堆,棧這四個部分讓P2的正文段指向P1的正文

段塊,數據段->P2自己的數據段塊(為其分配對應的塊),堆->P2自己

的堆塊,棧->P2自己的棧塊。如下圖所示:同左到右大的方向箭頭表示

復制內容

COW: Copy On Writing?? 寫時復制

內核只為新生成的子進程創建虛擬空間結構,它們來復制于父進程的虛擬

究竟結構,但是不為這些段分配物理內存,它們共享父進程的物理空間,

當父子進程中有更改相應段的行為發生時,再為子進程相應的段分配物理空間。

關閉進行調用destroy(銷毀某個進行

13)進程的狀態:

運行態:running

睡眠態:sleeping

可中斷睡眠:interruptible? (中斷過程中時可隨時喚醒)

不可中斷睡眠: uninterruptible? (被IO阻塞的進程)

就緒態:runnable

停止態:stopped,不可被調度為運行狀態;

僵死態:zombie

(父進程處理子進程關閉后的狀態,如父進程意外關閉后,子進程

處于孤立的狀態。這時當子進程停止后為僵死進程)。當父進程關閉

前后利用init ,systemd(centos 7)進程指定為子進程新的父進程。

14)進程管理:

task struct: 用于保存每個進程元數據信息

例如:pid, ppid, memory, thread, files

task list: 用一種稱作“鏈表”的數據結構來保存每個進程的task struct.

進程退出前會將其狀態和結果保存到自己的自己的task struct中,下次運行中

直接從tasks struct,這種稱為掛起狀態

進程切換:context switch

保存現場:

恢復現場:

OS: 提供虛擬的計算機,進而能夠將有限資源借助于“保護”機制分配多個

同時運行的程序,即“進程”使用,從而實現了所謂的多任務;

15) 并行處理機制

現代編程采用多線程模型,每個線程單獨的功能。單獨的執行流

進程: 方塊中代表4個內核,4條線條件4個單獨線程。并行執行。

該種方式運行在程序獨立、相互干擾少的情況下。

? ?

線程:tread

共享進程的資源,如父進程、打開文件等;

更輕量的、可被單獨調度的運行單元;

LWP:Light Weight Process(Linux是輕量級處理過程,

Linux是線程即進程,進程即線程)

第二、進程命令

Linux進程查看及管理工具:top, pstree, ps, pidof, pgrep, pkill, htop,

glances, pmap, vmstat, dstat, iostat, sar, kill, job, bg, fg

Linux系統上除init以外的所有子進程,都是由其父進程fork()自身而來,

遵循COW機制;進程展現為“進程樹”;

1) pstree命令:

進程樹查看;

-p: 顯示各進程的PID;

centps 7父為systemd ? ? ? ? ? ?centos 6為init

?

pstree –p 顯示進程及id

2)ps: process state

顯示的是ps命令執行時,系統上當前進程狀態信息的快照 為靜態結果;

Linux運行中的內核的相關信息是通過/proc偽文件系統輸出的;各進程

都有一個以其PID命名的子目錄,每個子目錄中有許多文件存儲了進程的

相關狀態信息;

proc目錄下包括進程ID的目錄(為正在運行的進程創建該目錄)說其

是偽文件系統是因為它是一個映射。每個目錄下都包括相應的文件。

?

ps相關命令都是調用該目錄下的相關文件。

支持眾多選項:

BSD風格? (不需要減號???? -

SysV風格 (需要都減號? - 引用)

根據進程啟動時是否是通過終端上的用戶接×××互式啟動的,進程可分為兩類:

與終端相關的進程: a

與終端無關的進程: x

以用戶為中心組織進程狀態信息顯示:u

AA:常用選項組合1:axu? (在centos 7中可用-aux或aux 結果相同)

命令解釋:與用戶終端相關或無關的進程。

USER?????? PID %CPU %MEM??? VSZ?? RSS TTY ?STAT START?? TIME COMMAND

USER表示進程的屬主,那個身份在運行。

pid為進程號

%CPU CPU比例

%MEM? 內存百分比

VSZ: Virtual memory Size? 線性地址空間占用的空間大小;

RSS:常用駐內存集;指不可以被交換至swap空間的數據占據空間大小;

tty 終端:那個終端啟動的此進程 ?表示不知道那個

STAT:進程狀態

R: running,運行狀態;

S:interruptible sleeping,可中斷睡眠

D:uniterruptible sleeping, 不可中斷睡眠

T: stopped

Z: zombie

s: session leader (一般為執行命令的bash)

+: 前臺進程,占據著某終端

l: 多線程進程

<:>

N: 低優先級進程

START: 啟動時間

TIME: 占據CPU累積時長

COMMAND: 啟動當前進程或線程的命令行程序,[]表示為內核線程;

BB:常用選項組合2: -ef???????? -e: 顯示所有進程;? (相當前aux)

-f: 顯示豐富格式信息fullformat

CC:常用選項組合3:-eFH

-F: 顯示額外信息

-H: 以層級形式顯示進程間關系;

DD:自定義需要顯示的信息:

axo (a代表與終端相關 ,x與終端無關,o可選項)

ps axo pid,command,psr,pri,ni

psr: 當前進程運行的CPU編號;

pri: 當前進程的優先級;

ni: 當前進程的nice值(與進程調整相關)

-20, 19

ppid代表父進程

3)pgrep:? 用于過程進程

語法格式:pgrep [OPTIONS] "PATTERN"

-U UID:僅顯示以指定用戶身份運行的進程;

-G GID

-l: 顯示PID和進程名;

示例:顯示postfix的用戶進程號和名稱

4)pidof:

pidof PROGRAM

PROGRAM: 給定命令行程序

顯示與程序sshd相關進程id信息

5)top命令:

第1)-4)為靜態狀態命令,后為動態命令(定時刷新)

有許多交互式的子命令;

第一行top:顯示當前系統負載信息。與uptime執行結果相同

說明:啟動時間?? 運行時長? 當前登陸用戶數量? 過去負載狀態

0.00,0.001,0.05 代表過1分鐘、5分鐘、15分鐘的負載)

(以上并不是CPU資源的百分比,是隊列的長度:多個隊列等

待運行)

第二行:tasks:

說明:多個個進程? 運行數量??? sleeping數量?? stop數量?? 僵死態數量

第三行: CPU百分比

Cpu(s):? 0.0%us,? 0.0%sy,? 0.0%ni,100.0%id,? 0.0%wa,? 0.0%hi,? 0.0%si,? 0.0%st

us: user space

sy: system (kernel space)

ni: nice

id: idle

wa: wait io? 等待IO的百分比

hi: hardware interrupt

si: software interrupt

st: stolen, 被虛擬機“偷走”的百分比

1:平均或單獨顯示CPU的負載狀態;

第四行:內存

KiB Mem :? 1877664 total,? 1150304 free,?? 351380 used,?? 375980 buff/cache

總物理內存????? 剩余內存??? 使用的????? buffer內存

第五行:交換swap

KiB Swap:? 5242876 total,? 5242876 free,??????? 0 used.? 1337264 avail Mem

交換內存所有空間?? 空閑空間?? 已用空間?? 可用空間

第五行:

pid?? 用戶?? 優先級? nice值?? 虛擬內存級? 常駐內存級?? 共享內存? 狀態

占CPU百分比,占內存百分比 ,累計運行時間,啟動運行的命令

顯示排序黑CPU百分比進行(默認)

P:以占據的CPU百分比大小排序;

M:以占據Memory空間大小排序;

T:CPU累積占用時間排序;

l: 是否顯示系統負載行;(第一行)

隊列長度的合理區間:CPU顆數*0.7

t: 是否顯示進程摘要信息及CPU負載狀態;

m: 是否顯示內存相關的狀態信息;

s: 修改延遲時長

k: 終止指定進程

q: 退出命令

s: 修改延遲時長

? ?

k: 終止指定進程

top命令的選項:

-b: batch,批次顯示

-n #: 顯示的批次數量

示例:top –b –n 2 顯示二批

-d #: 指明延遲時長

示例:top –d 1?? 表示1秒刷新一次

6)uptime命令: 顯示當前系統時間,運行時長,登錄用戶數及系統平均負載;

命令總結:pstree, ps, pgrep, top, uptime, pidof

7)htop:

需要在epel源當中安裝

在/etc/yum.repos.d目錄下創建epel.repo文件

內容如下:

利用yum install htop進行安裝

? ?

交互式命令:

u: 過濾僅顯示選定用戶的進程;(先U再選擇用戶)

?

s: 跟蹤選定的進程所發起的系統調用;

l: 顯示選定進程所打開的文件;

t: 顯示進程的層次結構;

a: 設定進程的cpu親緣性;(將選定的進程綁定在指定的CPU上)

選項:

-d #: 延遲時長

-u USERNAME: 僅顯示指定用戶的進程;

-s COLUMN: 根據指定的字段進行排序;

8)vmstat命令: 狀態查看

用法:vmsate [delay [count]]?? 每隔2秒,顯示6次退出

? ?

procs: 進程相關狀態

r: 運行隊列的長度:有數字時等待運行的進程的個數;(隊列長度)

b:阻塞隊列長度:有數字是表示處理不可中斷睡眠狀態的進程的個數;

(即IO阻塞隊列長度) 單個CPU core 不能大于3基本正常

memory:

swpd: 交換內存使用量;

free: 空間的物理內存量;

buffer: 用于buffer的內存總量;

cache: 用于cache的內存總量;

swap:

si: 數據進入swap中的速率(kb/s) 物理放到交換內存

so: 數據離開swap的速率(kb/s) 交換內存至物理內存

io

bi: 從塊設備讀入數據到系統的速率(kb/s)

bo: 保存數據至塊設備的速率(kb/s)

system

in: 中斷速率

cs: 進程切換的速率

cpu

us:??? eser space

sy:??? system? sy高說明程序有問題,太多系統調用

id:??? idle

wa:?? waitting?? wait過高表示磁盤速率慢

st:?? steal

選項:

-s:顯示內存的狀態統計數據

? ?

9)/proc/#接口: (針對proc目錄相應進程號下面的文件)

10)pmap: 查看指定進程的內存映射關系;

pmap [OPTIONS] pid...

-x: 顯示擴展信息

也可通過cat /proc/#/maps 查看

? ?

11)glances: (需要epel源)

使用python開發

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port]

[-P password] [--password] [-t refresh] [-f file] [-o output]

常用選項:

-b: 以Byte/s為單位顯示網卡設備數據交換速率;

-d: 關閉磁盤I/O功能模塊;

-f /PATH/TO/SOMEFILE:設置輸出文件的位置及格式;

-o {HTML|CSV}:

-m: 關閉mount功能模塊

-n: 關閉網絡功能模塊

-r: 關閉進程列表功能模塊

-t #: 指定延遲時長,默認為3秒;

-1:單獨顯示每顆CPU相關負載數據信息;

glances支持遠程模式:

即可以以C/S模式工作:

Server: 以監聽模式啟動glances;

Client: 以遠程模式啟動glances,遠程連入指定服務器,并Server上的相關性能數據;

服務模式:

glances -s -B IPADDR

-B: 用于指明監聽的本地地址;

客戶端模式:

glances -c IPADDR

-c: 用于連入的服務器的地址;

12)dstat: 整合了vmstat, iostat, netstat and ifstat四款工具的功能;

? ?

dstat [-afv] [options..] [delay [count]]

示例?? dstat 2 5? #每2秒刷新?? 顯示5次,第6次退出

sysmte下面的 int 是中斷?? csw指切換上下文

-c: 顯示cpu性能指標相關的統計數據;

-d: 顯示disk相關的速率數據;

-g: 顯示page相關的速率數據;

-i: 顯示interrupt相關的速率數據;

-l: 顯示load average相關的統計數據;

-m: 顯示memory相關的統計數據;

-n: 顯示網絡收發數據的速率;

-p: 顯示進程相關的統計數據,

-r: io請求的速率;

-s: 顯示swap的相關數據

-y: 顯示系統相關的數據,包括中斷和進程切換;

--top-cpu:顯示最占用CPU的進程;

? ?

--top-bio:顯示最消耗block io的進程;

--top-io:最占用io的進程;

--top-mem:顯示最占用內存的進程;

--ipc: 顯示進程間通信相關的速率數據;

? ?

--raw: 顯示raw套接的相關的數據;

--tcp: 顯示tcp套接字的相關數據;

? ?

--udp: 顯示udp套接字的相關數據;

--unix: 顯示unix sock接口相關的統計數據;

--socket:

-a: -cdngy

IPC: 進程間通信

常見形式:

msg( message queue)?? (消息隊列)

sem( semerphore) (旗語,很短小的消息)

shm(shared memory)? (共享內存)

signal (標簽)

13) signal: 傳遞給進程的短小信息

Linux主機支持的進程間可用到的信息:

(1) kill -l

(2) man 7 signal

? ?

向進程發信號:

kill [-SIGNAL] PID

默認的信號為SIGTERM;

信號表示方式:

(1) 完整名稱,例如SIGINT

(2) 簡寫名稱,例如INT

(3) 數據代稱,例如2

常用信號:

SIGHUP: 1, 通知進程重讀其配置文件以讓新的配置生效,但不用重新啟動進程;

SIGINT:2, 打斷正在運行中的進程,相當于鍵盤組合鍵Ctrl+c

SIGKILL:9, 強行中止正在運行中的進程

SIGTERM: 15, 安全中止正在運行中的進程

SIGSTOP: 19, 暫停進程

SIGCONT: 18, 繼續運行指定進程

kill相似的一組進程:

killall [-SIGNAL] PROGRAM

示例:啟用httpd?? service httpd start

查看http的進程號,kill默認是15(安裝終止正在運行的進程)

示例:利用數字 kill –9 進程號

示例:kill httpd

? ?

命令總結:htop, vmstat, glances, dstat, kill, killall

第三、作業管理:

1)定義

作業是定義的一組具有相同功能的一組進程或程序,稱為作業。

通過是否通過終端啟動分為

前臺作業:通過終端啟動,并且在停止之前也會一直占據終端;

后臺作業:作業啟動之時與終端無關,或者是在前臺啟動,但啟動后轉為

與終端無關模式運行; (不是所有命令適合在終端上運行)

如何讓作業運行于后臺?

1、對于已經啟動并處于運行中的作業:

Ctrl+z

Note: 作業被送往后臺后,默認處于stopped狀態;

示例:運行后使用htop命令,control+z后為stop狀態

? ?

2、對于尚未啟動的作業:

COMMAND &

示例:? vmstat 1 &??? 將送到后臺

注意: 此兩類方式相關作業,仍然與終端相關;這意味著,終端終止,將會導

致與此終端相關的所有作業被終止; 與session leader分離

剝離進程與終端的關系:

# nohup COMMAND &

3、守護進程:自動運行在后臺

作業查看:

jobs命令

作業號、作業狀態、啟動命令行程序

? ?

作業控制命令:

fg [[%]job_num]:把指定的作業調回前臺; 示例:fg %2 表示調后2號作業?;?百分號也可

? ?

bg [[%]job_num]:把調往后臺的指定的作業啟動起來,讓其后臺默默運行;

但此作業必須支持運行于后臺;

kill [%job_num]:終止指定的作業; kill的作業號的百分號%i不能夠省略。

4、 進程優先級調整:

AA定義:

優先級級別從0-139? 1-99為實時優先級??? 數字越大優先級越高。

100-139為靜態優先級:數字越小優先級越高

內核針對靜態優先級進行調整

動態優先級:動態調整

靜態優先級:

BB:手動調整優先級,利用nice值

調整時只能夠調大nice值

通過指定進程的nice值來調整其優先級;用戶 空間運行的進程一般都有其nice值;

nice值: -20, 19

優先級:? 100, 139

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

(1) 對于尚未啟動的進程:

# nice -n N COMMAND

(2) 對于已經啟動并處于運行中的進程:

# renice -n N PID

示例:ps axo pid,command,pri,ni(查看進程號、名稱、nice、優先級)

nice -n -5 httpd? 調整nice值為-5,輸出為

針對已運行的使用renice

?

注意:普通用戶僅能夠調大nice,調低優先級;

第四:其它命令整理

1)sar :收集、報告用戶信息

sar [ options ] [ [ ] ]

Options:

-B 所有page信息

-A? 所有信息相當于

-b io速率

示例: sar -u 2 5? CPU利用率

sar -r -n DEV -f /var/log/sa/sa16

顯示內存及網絡并保存到/var/log/sa/sa16目錄

? ?

2) iostat,

顯示CPU、device及分區信息

iostat [ options ] [ [ ] ]

Options:

-c 顯示 CPU????? -d 顯示設備

示例:iostat 2 5

示例:iostat –c??? /? iostat –d

3)ifstat

顯示網絡接口信息

ifstat [OPTION] [ PATTERN [ PATTERN ] ]

-e erros錯誤信息

-r reset

示例:

4) tsar;

作業:

命令總結:jobs, fg, bg, nice, renice

博客作業:進程管理工具htop/glances/dstat的使用;

總結

以上是生活随笔為你收集整理的linux进程属主6,20150917 Linux进程查看与管理以及作业管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。