Linux進程及作業管理

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

Process: 運行中的程序的一個副本,存在生命週期

Linux內核存儲進程信息的固定格式:task struct

多個任務的的task struct組件的鏈表:task list

進程創建:

init

父子關係

進程:都由其父進程創建

進程優先級:

0-139:

1-99:實時優先級

100-139:靜態優先級(數字越小,優先級越高)

Nice值:-20,19

進程內存:

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

存儲Page

MMU:Memory Management Unit

IPC: Inter Process Communication

同一主機上:

signal、shm: shared memory、semerphor

不同主機上:

rpc: remote procecure call、socket:


Linux內核:搶佔式多任務

進程類型:

守護進程: 在系統引導過程中啓動的進程,跟終端無關的進程

前臺進程:跟終端相關,通過終端啓動的進程

Note:也可把在前臺啓動的進程送往後臺,以守護模式運行

進程狀態:

運行態:running

就緒態:ready

睡眠態:

可中斷:interruptable

不可中斷:uninterruptable

停止態:暫停於內存中,但不會被調度,除非手動啓動之;stopped

僵死態:zombie


進程的分類:

CPU-Bound

IO-Bound


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

pstree命令:

pstree - display a tree of processes


ps: process state

ps - report a snapshot of the current processes

Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中

ps [OPTION]...

選項:支持兩種風格

常用組合:aux

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

a: 與終端相關的進程

x: 與終端無關的進程

~]# ps aux

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

VSZ: Virtual memory SiZe,虛擬內存集

RSS: ReSident Size, 常駐內存集

STAT:進程狀態

R:running

S: interruptable sleeping

D: uninterruptable sleeping

T: stopped

Z: zombie

+: 前臺進程

l: 多線程進程

N:低優先級進程

<: 高優先級進程

s: session leader

常用組合:-ef

-e: 顯示所有進程

-f: 顯示完整格式程序信息


常用組合:-eFH

-F: 顯示完整格式的進程信息

-H: 以進程層級格式顯示進程相關信息


常用組合:-eo, axo

-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

ni: nice值

pri: priority,優先級

psr: processor, CPU

rtprio: 實時優先級


pgrep, pkill:

pgrep [options] pattern

pkill [options] pattern

-u uid: effective user

-U uid: real user

-t terminal: 與指定終端相關的進程

-l: 顯示進程名

-a: 顯示完整格式的進程名

-P pid: 顯示其父進程爲此處指定的進程的進程列表


pidof:

根據進程名獲取其PID


top:

有許多內置命令:

排序:

P:以佔據的CPU百分比

M:佔據內存百分比

T:累積佔據CPU時長

首部信息顯示:

uptime信息:l命令

tasks及cpu信息:t命令

cpu分別顯示:1 (數字)

memory信息:m命令

退出命令:q

修改刷新時間間隔:s

終止指定進程:k

選項:

-d #: 指定刷新時間間隔,默認爲3秒

-b: 以批次方式

-n #: 顯示多少批次


htop命令:

選項:

-d #: 指定延遲時間

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

-s COLOMN: 以指定字段進行排序

命令:

s: 跟蹤選定進程的系統調用

l: 顯示選定進程打開的文件列表

a:將選定的進程綁定至某指定CPU核心

t: 顯示進程樹


vmstat命令:

vmstat [options] [delay [count]]  

procs:

r:等待運行的進程的個數

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

memory:

swpd: 交換內存的使用總量

free:空閒物理內存總量

buffer:用於buffer的內存總量

cache:用於cache的內存總量

swap:

si:數據進入swap中的數據速率(kb/s)

so:數據離開swap中的數據速率(kb/s)

io:

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

bo: 保存數據至塊設備的速率

system:

in: interrupts, 中斷速率

cs: context switch, 進程切換速率

cpu:

us、sy、id、wa、st

選項:

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


pmap命令:

pmap - report memory map of a process

pmap [options] pid [...]

-x: 顯示詳細格式的信息;

另外一種實現:

# cat /proc/PID/maps


glances命令:

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

 內建命令:

a  Sort processes automatically     l  Show/hide logs

c  Sort processes by CPU%           b  Bytes or bits for network I/O

m  Sort processes by MEM%           w  Delete warning logs

p  Sort processes by name           x  Delete warning and critical logs

i  Sort processes by I/O rate       1  Global CPU or per-CPU stats

d  Show/hide disk I/O stats         h  Show/hide this help screen

f  Show/hide file system stats      t  View network I/O as combination

n  Show/hide network stats          u  View cumulative network I/O

s  Show/hide sensors stats          q  Quit (Esc and Ctrl-C also work)

y  Show/hide hddtemp stats

常用選項:

-b: 以Byte爲單位顯示網卡數據速率

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

-f /path/to/somefile: 設定輸入文件位置

-o {HTML|CSV}:輸出格式

-m: 禁用mount模塊

-n: 禁用網絡模塊

-t #: 延遲時間間隔

-1:每個CPU的相關數據單獨顯示

C/S模式下運行glances命令:

服務模式:

glances -s -B IPADDR

IPADDR: 指明監聽於本機哪個地址

客戶端模式:

glances -c IPADDR

IPADDR:要連入的服務器端地址


dstat命令:

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

-c: 顯示cpu相關信息

-C #,#,...,total

-d: 顯示disk相關信息

-D total,sda,sdb,...

-g:顯示page相關統計數據

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

-n: 顯示network相關統計數據

-p: 顯示process相關統計數據

-r: 顯示io請求相關的統計數據

-s: 顯示swapped相關的統計數據

--tcp

--udp

--unix

--raw

--socket

--ipc

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

--top-io: 顯示最佔用io的進程

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

--top-lantency: 顯示延遲最大的進程


kill命令:

向進程發送控制信號,以實現對進程管理

顯示當前系統可用信號:

# kill -l

# man 7 signal

常用信號:

1) SIGHUP: 無須關閉進程而讓其重讀配置文件

2) SIGINT: 中止正在運行的進程;相當於Ctrl+c

9) SIGKILL: 殺死正在運行的進程

15) SIGTERM:終止正在運行的進程

18) SIGCONT

19) SIGSTOP

指定信號的方法:

(1) 信號的數字標識;1, 2, 9

(2) 信號完整名稱;SIGHUP

(3) 信號的簡寫名稱;HUP

向進程發信號:kill [-SIGNAL] PID...

終止“名稱”之下的所有進程:killall [-SIGNAL] Program


Linux的作業控制

前臺作業:通過終端啓動,且啓動後一直佔據終端

後臺作業:可以通過終端啓動,但啓動後即轉入後臺運行(釋放終端)

如何讓作業運行於後臺?

(1) 運行中的作業:Ctrl+z

(2) 尚未啓動的作業:# COMMAND &

此類作業雖然被送往後臺運行,但其依然與終端相關;如果希望送往後臺後,剝離與終端的關係:

# nohup COMMAND &

查看所有作業:

# jobs

作業控制:

# fg [[%]JOB_NUM]:把指定的後臺作業調回前臺

# bg [[%]JOB_NUM]:讓送往後臺的作業在後臺繼續運行

# kill [%JOB_NUM]:終止指定的作業


進程優先級調整:

靜態優先級:100-139

進程默認啓動時的nice值爲0,優先級爲120

nice命令:

nice [OPTION] [COMMAND [ARG]...]

renice命令:

renice [-n] priority pid...

查看:

ps axo pid,comm,ni

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章