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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux进程 管理,Linux进程查看与管理以及作业控制

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

Linux進程查看與管理

靜態結構:重底層開始往上

底層:硬件

kernel(OS):各硬件接口封裝成簡潔的接口

庫:將內核功能封裝成功能模塊,供程序員研發使用

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

動態結構:重底層開始往上

底層:bios,

內核:通過BTR啟動內核程序

程序:程序=指令+數據;

CPU:特權指令(系統調用);普通指令

程序執行環境:內核模式:運行內核級指令

用戶模式:運行普通指令

應用程序:運行普通指令:直接運行于CPU

運行特權指令:通過system call

進程:運行中的程序,運行在自己專有的內存空間

內存:cpu在內存中取數據;存指令;存數據;程序運行于內存空間;

內存空間:物理內存映射到邏輯內存,編程中在邏輯內存做個假設,在映射到物理內存來。在邏輯內存中的連續數據可能到物理內存頁框中可能就不連續存儲。

地址空間:物理地址空間;線性地址空間

線性地址空間:每一個內存都運行在自己的邏輯空間,然后要映射到物理內存空間。每一個進程的線性地址空間,都遵循一定的規范;在最底端是指令且是只讀的,接著初始值為零和不為零的數據;接著是堆和棧,對內存的實時調取。

32bits: 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

4G空間分配: 1G, kernel;3G(2.7G), app

進程創建:每一進程是有他的父進程fork()創建而來;

parent(進程)-----> fork()----->child;子進程發起fork調用,創建復制fork的子進程,且共同使用同一個內存地址空間。

COW: Copy On Writing寫時復制;當子進程要修改進程的數據時,新建一個復制fork的進程,使用自己的地址空間。

進程:fork(), clone()

COW: Copy On Writing

寫時復制

進程回收:銷毀進程使用destroy

進程追蹤:內核內存空間中,創建task struct(任務結構)。

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

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

進程調度:cpu通常只能跑一個進程,其他進程等待。

進程的上下文切換:進程按照固定時間輪詢,中間結果如何都會存入自己內核的task struct(任務結構)中。下次運行時,直接從自己內核的task struct(任務結構)中上次暫停的地方調用(相當于掛起,重新載入)。

進程優先級:140個,0-139

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

100-139:數字越小,優先級越高; ? ?靜態優先級;動態優先級;

多任務:多進程同時運行;搶占式多任務

算法時間復雜度:Big O衡量

O(1)

O(logn)

O(n)

O(n^2)

O(2^n)

進程分類:

CPU bound: CPU密集型

I/O bound: IO密集型

進程的狀態:

運行態:running

睡眠態:sleeping

可中斷睡眠:interruptible,隨時喚醒到cpu

不可中斷睡眠: uninterruptible,被IO阻塞的進程,等待磁盤調用完畢才能執行

就緒態:runnable

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

僵死態:zombie,父進程意外中止,子進程還運行,一般會指定init或systemctl

線程:tread,并行編程模式。一個進程內部自我管理執行的多個執行流。將多個執行流運行在一個CPU上的多個內核上。

LWP:Light Weight Process;對于linux,線程就是進程,進程也是線程。

Linux進程查看及管理工具:top, pstree, ps, pidof, pgrep, pkill, htop, glances, pmap, vmstat, dstat, iostat, sar, kill, job, bg, fg

命令:

pstree:進程樹查看;

-p: 顯示各進程的PID;

ps:process state

Linux運行中的內核的相關信息是通過/proc偽文件系統輸出的;各進程都有一個以其PID命名的子目錄,每個子目錄中有許多文件存儲了進程的相關狀態信息;

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

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

與終端相關的進程: a

與終端無關的進程: x

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

支持眾多選項:BSD風格;SysV風格,-引導

常用選項組合1:axu

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

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

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

STAT:進程狀態

R: running,運行狀態;

S:interruptible sleeping,可中斷睡眠

D:uniterruptible sleeping, 不可中斷睡眠

T: stopped

Z: zombie

s: session leader;

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

l: 多線程進程

<:>

N: 低優先級進程

START: 啟動時間

TIME: 占據CPU累積時長

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

常用選項組合2:-ef

-e: 顯示所有進程;

-f: 顯示豐富格式信息

常用選項組合3:-eFH

-F: 顯示額外信息

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

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

ps axo pid,command,psr,pri,ni

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

pri: 當前進程的優先級;

ni: 當前進程的nice值;

-20, 19

pgrep:

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

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

-G GID

-l: 顯示PID和進程名;

pidof:

pidof PROGRAM

PROGRAM: 給定命令行程序

top命令:

有許多交互式的子命令;

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

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

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

l: 是否顯示系統負載行;

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

t: 是否顯示進程摘要信息及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

hi: hardware interrupt

si: software interrupt

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

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

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

q: 退出命令

s: 修改延遲時長

k: 終止指定進程

top命令的選項:

-b: batch,批次顯示

-n #: 顯示的批次數量

-d #: 指明延遲時長

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

htop:

u: 過濾僅顯示選定用戶的進程;

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

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

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

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

選項:

-d #: 延遲時長

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

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

vmstat命令:

用法:vmsate [delay [count]]

? ? ??procs:

r: 等待運行的進程的個數;(隊列長度,每顆CPU的每個核心2-3個以內)

b:處理不可中斷睡眠狀態的進程的個數;(即IO阻塞隊列長度)

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: userd

sy:system

id:idel

wa:wait

st:stop

注意:wait過高,因為io速度不好,磁盤速率太慢;system過高,程序寫的有問題。

選項:

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

/proc/#接口:

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

pmap [OPTIONS] pid...

glances:

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: 用于連入的服務器的地址;

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

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

? ? ? ? ??-a: -cdngy

-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:

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, 繼續運行指定進程

killall相似的一組進程:

killall [-SIGNAL] PROGRAM

作業管理:

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

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

如何讓作業運行于后臺?

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

Ctrl+z

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

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

COMMAND &

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

3、剝離進程與終端的關系:

# nohup COMMAND &

作業查看:

jobs命令

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

作業控制命令:

fg [[%]job_num]:把指定的作業調回前臺;

bg [[%]job_num]:把調往后臺的指定的作業啟動起來,讓其后臺默默運行;但此作業必須支持運行于后臺;

kill [%job_num]:終止指定的作業;

進程優先級調整:

靜態優先級:

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

nice值: -20, 19

優先級: ?100, 139

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

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

# nice -n N COMMAND

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

# renice -n N PID

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

總結

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

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