1. 程式人生 > >linux系統管理之進程管理

linux系統管理之進程管理

進程管理

進程管理的操作命令



為了管理這些linux進程,用戶應該能夠:

查看所有運行中的進程

查看進程消耗資源

定位個別進程並且對其執行指定操作

改變進程的優先級

殺死指定進程

限制進程可用的系統資源等

linux提供了許多命令來讓用戶來高效掌控上述的操作;

1.pstree - 顯示進程的樹狀圖來展示進程間關系

linux中,每一個進程都是由其父進程創建的。此命令以可視化方式顯示進程,通過顯示進程的樹狀 圖來展示進程間關系。如果指定了pid了,那麽樹的根是該pid,不然將會是init(pid: 1)。

技術分享

2.ps -

Linux 中最基礎的瀏覽系統中的進程的命令。能列出系統中運行的進程,包括進程號、命令、CPU使用量、內存使用量等。下述選項可以得到更多有用的消息。

三種風格的選項options:

UNIX options, which may be grouped and must be preceded by a dash.

BSD options, which may be grouped and must not be used with a dash.

GNU long options, which are preceded by two dashes.


BSD-style

a:顯示所有與終端相關的進程

x:顯示所有與終端無關的進程

u:顯示發起進程的用戶的名稱

常用三者組合,aux

顯示結果:

技術分享


其顯示的結果各字段的含義:

USER:進程所有者

PID:進程標識符

%CPU:進程所占CPU處理時間的百分比

%MEM:進程占用內存百分比

VSZ:虛擬內存集(可交換內存集)

RSS:常駐內存集

TTY:進程與哪個終端相關,標識與終端無關

STAT:進程的狀態,如下:

R:running正在運行的進程;

S:interuptible sleep,可中斷睡眠狀態;

D:uninteruptible sleep,不可中斷睡眠狀態;Disk Block;

T:Trace/STOPPED:被跟蹤/已停止

Z:Zombie,僵死態 父進程已消失

+: 表示是一個前臺進程;

l:包含多線程的進程

<: 高優先級進程

N:低優先級進程

s:Session leader 有子進程的父進程;

START:進程開始執行時的時間戳

TIME:進程累計的cpu占用時間;

COMMAND:啟動進程的命令行參數

UNIX風格的選項:

-e:顯示所有進程

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

-F:與-f幾乎相同


常用選項組合:-ef

其結果如下:

技術分享

雖然跟ps aux所顯示的結果類似,但也有不同之處:

PPID:父進程的pid

C:進程占用的CPU時間百分比



3.pgrep, pkill - look up or signal processes based on name and other attributes

根據進程名稱或者其他屬性查看進程或向進程發送信號

pgrep [opts] pattern

常用選項:

-u uid:顯示進程的有效用戶

-U uid:顯示進程的真實用戶

-t TERM:顯示與指定終端相關的進程

-l:顯示進程名稱和PID

-a:顯示進程的完整參數

4.pidof -- find the process ID of a running program。

顯示指定進程的PID

5.top - display Linux processes

這個命令顯示的內容還是畢竟詳盡的:

技術分享

首先是top的首部:

top - 16:47:00 up 7:53, 1 user, load average: 0.00, 0.01, 0.05

Tasks: 393 total, 1 running, 392 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 1001360 total, 542116 free, 201176 used, 258068 buff/cache

KiB Swap: 2097148 total, 2097148 free, 0 used. 599600 avail Mem


第一行:uptime信息

當前系統時間 系統運行時長 當前登錄系統的用戶總數 過去的1,5,15分鐘三個時間段的在CPU上等待運行的進程隊列的平均長度

第二行:系統中運行的進程總數 正在運行的 睡眠狀態的 已停止的 僵死態的

第三行:CPU的占用百分比

us:user space 用戶空間的進程占用的cpu時間的百分比

sy:system 內核空間的內核進程占用的cpu時間百分比

ni:使用nice值調整了進程優先級之後,額外多占用的cpu時間的百分比

id:idle,cpu空閑時間的百分比,一般為10-20%;

wa:waiting,等待IO完成所消耗的CPU時間的百分比

hi:hardware interrupting,處理硬件中斷事件所消耗的CPU時間的百分比

si:software interrupting,處理軟件中斷事件所消耗的CPU時間的百分比

st:stolen,被虛擬化程序等偷走的cpu時間的百分比

第四行:以KB為單位顯示物理內存空間的使用情況

total:物理內存的總大小

free:空閑的物理內存空間大小

used:已經被使用的物理內存空間大小

buff/cache:緩沖區和緩存區所消耗的物理內存大小;隨時可以回收

第五行:以KB為單位顯示交換分區SWAP空間的使用情況

‘total‘ ‘used‘ ‘free‘ ‘avail Mem‘

首部之後的內容 就類似與ps aux了

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


top是前臺進程,具有交互式命令如下:

1 顯示/隱藏CPU核心信息

P 根據CPU占用百分比排序

M 根據物理內存占用百分比進行排序

T 根據累計CPU占用時間進行排序

l 關閉/顯示uptime信息

t 關閉/顯示第二三行信息

m 關閉/顯示第四五行信息

q 退出top交互模式

s 修改top的刷新時間間隔

k 終止指定PID的進程

常用選項:

-d #:相當於交互模式裏的s,指定刷新的時間間隔;默認3.0s

-b:按照批次顯示進程信息

-n #:與-b一起使用,標識顯示多少批次


6.vmstat - 報告虛擬內存的統計信息

用法:vmstat [options] [delay [count]]

options:

-s 統計內存使用的相關信息 /proc/meminfo文件中提取的信息;

delay:按照默認是s為時間,重復執行這個命令

count:指定要執行vmstat的次數


輸出信息的格式如下:

技術分享

各字段含義如下:

procs

r running運行中

b block阻塞態

memory

swpd

free

buff

cache

swap

si swap in 頁框進入swap空間

so swapout swap空間拿出去到頁框

io

bi blockin 加載到內存過程

bo blockout 內存保存數據到塊設備

system

in interrupt 中斷

cs 上下文切換

cpu

us userspace

sy

id idle

wa waiting

st stolen

7.pmap - report memory map of a process 進程映射表

用法:pmap [options] pid [...] 參考/proc/DIGIT(pid)/maps

技術分享

要修改proc目錄下PID目錄下的文件 不能用vim,而是echo > 重定向的方式


options:-x,--extended : 顯示一些擴展信息,如RSS Dirty;

8.htop,glances dstat

htop - 增強版top,個人認為格式比top更美觀

技術分享

用法:htop [-dChusv]

選項:

-d #:htop刷新的時間間隔

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

-s COLUME_NAME:根據指定字段進行排序

交互式命令:

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

t/F5:顯示進程樹結構

a:選定的進程綁定到某指定的CPU核;

glances - A cross-platform curses-based monitoring tool

用法:glances [-bdhmn1] [-t refresh] [-f file] [-o output]

常用選項:

-b:K Byte為單位,顯示網卡的數據速率

-d 關閉磁盤的IO模塊

-m 關閉Mount模塊

-n 關閉Network模塊

-1 單獨顯示每顆CPU核心的數據統計信息

-t # 設定刷新時間間隔

-o {HTML|CSV} 為輸出數據指定輸出的格式

-f /PATH/TO/OUTPUT_DIR 指定輸出文件的路徑,默認輸出文件名為glances.html或者glances.csv

此命令 可以工作於C/S模式下;

S:服務器模式

glances -s -B IPADDR

這裏的IPADDR是服務器本地的某個IP地址;

C:客戶端模式

glances -c IPADDR

這裏的IPADDR是遠程服務器指定監聽的IP地址


進程之間是可以通信的,但是不能隨意通信;linux內核管理進程方式--單獨管理;

IPC--Inter-Process Communication

1.signal

2.semaphore

3.shared memory(SHM)共享內存

4.socket


dstat:

用法:dstat [-afv] [options..] [delay [count]]

常用選項:

-c --cpu

-d --disk

-n --net

-g --paging

-y --sys

以上五個為默認選項

--tcp

--udp



“殺死”終止進程的命令 -- kill pkill kilall

1.kill - teminate a process

用法 kill [-s signal] pid..

查看信號signal的信息: kill -l


有效信號的標識方法

1.使用數字編碼

2.完整名稱

3.簡寫名稱,即不包含‘SIG’的其余部分


常用信號:

1)SIGHUP 無需關閉對應進程而讓其重新選取自身的配置文件

2)SIGINT 一般用於終止正在運行的前臺進程 相當於Ctrl+C

9)SIGKILL 沒有任何預兆的終止正在運行的進程,‘殘暴值‘五顆星!

15)SIGTERM 默認信號,終止正在運行的進程,但允許進程‘料理後事‘

18)SIGCONT 讓轉入後臺的進程繼續運行

19)SIGSTOP 讓進程轉入後臺並停止運行

2.killall - kill processes by name

用法:killall PRO_NAME

3.pkill -

根據模式匹配(PATTERN)來進行終止進程;可能會誤終止其他進程


進程作業管理命令:

jobs,bg,fg

前面介紹到,進程有前臺進程和後臺進程,那麽如何讓作業工作與後臺?

1.對於正在運行的前臺作業:Ctrl+z

註意:實際上是向此進程發送了19號信號,轉入後臺後即停止運行

2.對於尚未啟動的作業,使其啟動並轉入後臺:

# COMMAND &

註意:此類作業是從前臺啟動,但是啟動後立即轉入後臺,但即便如此,此進程也是與終端相 關聯的進程;如果終端關閉,則此類進程也會終止;

3.對於尚未啟動的作業,使其啟動並轉入後臺,且同時解除與終端的關聯

# nohup COMMAND &


查看後臺作業:

jobs

將後臺作業轉入前臺運行

fg [JOB_ID]

使後臺作業在後臺運行:

bg [JOB_ID]

終止後臺作業:

kill %JOB_ID

kill %1

調整進程優先級的命令

nice - run a program with modified scheduling priority

用法:nice [OPTION] [COMMAND [ARG]...]

選項 -n NICE:指定nice值 默認為10

renice - alter priority of running processes

用法:renice [-n] priority pid...

選項:

-n NICE 調整指定nice值,在原有的nice值的基礎上+NICE


linux系統管理之進程管理