1. 程式人生 > >linux-基礎知識-23天

linux-基礎知識-23天

基礎

Linux進程及作業管理

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

Process: 運行中的程序的一個副本;

存在生命周期

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

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

進程創建:

init

父子關系

進程:都由其父進程創建

fork(), clone()

進程優先級:

0-139:

1-99:實時優先級;

100-139:靜態優先級;

數字越小,優先級越高;

Nice值:

-20,19

Big O

O(1), O(logn), O(n), O(n^2), O(2^n)

進程內存:

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

存儲Page

MMU:Memory Management Unit

IPC: Inter Process Communication

同一主機上:

signal

shm: shared memory

semerphor

不同主機上:

rpc: remote procecure call

socket:

Linux內核:搶占式多任務

進程類型:

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

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

註意:也可把在前臺啟動的進程送往後臺,以守護模式運行;

進程狀態:

運行態:running

就緒態:ready

睡眠態:

可中斷:interruptable

不可中斷:uninterruptable

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

僵死態:zombie

進程的分類:

CPU-Bound

IO-Bound

《Linux內核設計與實現》,《深入理解Linux內核》

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: 顯示進程樹

註意:Fedora-EPEL源

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

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

netstat命令:

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

顯示網絡連接:

netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]

-t: tcp協議相關

-u: udp協議相關

-w: raw socket相關

-l: 處於監聽狀態

-a: 所有狀態

-n: 以數字顯示IP和端口;

-e:擴展格式

-p: 顯示相關進程及PID

常用組合:

-tan, -uan, -tnl, -unl

顯示路由表:

netstat {--route|-r} [--numeric|-n]

-r: 顯示內核路由表

-n: 數字格式

顯示接口統計數據:

netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]

# netstat -i

# netstat -I IFACE

基本語法

========

過濾主機

--------

- 抓取所有經過 eth1,目的或源地址是 192.168.1.1 的網絡數據

# tcpdump -i eth1 host 192.168.1.1

- 源地址

# tcpdump -i eth1 src host 192.168.1.1

- 目的地址

# tcpdump -i eth1 dst host 192.168.1.1

過濾端口

--------

- 抓取所有經過 eth1,目的或源端口是 25 的網絡數據

# tcpdump -i eth1 port 25

- 源端口

# tcpdump -i eth1 src port 25

- 目的端口

# tcpdump -i eth1 dst port 25網絡過濾

--------

# tcpdump -i eth1 net 192.168

# tcpdump -i eth1 src net 192.168

# tcpdump -i eth1 dst net 192.168

協議過濾

--------

# tcpdump -i eth1 arp

# tcpdump -i eth1 ip

# tcpdump -i eth1 tcp

# tcpdump -i eth1 udp

# tcpdump -i eth1 icmp

常用表達式

----------

非 : ! or "not" (去掉雙引號)

且 : && or "and"

或 : || or "or"

- 抓取所有經過 eth1,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 數據

# tcpdump -i eth1 ‘((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host

192.168.1.200)))‘

- 抓取所有經過 eth1,目標 MAC 地址是 00:01:02:03:04:05 的 ICMP 數據

# tcpdump -i eth1 ‘((icmp) and ((ether dst host 00:01:02:03:04:05)))‘

- 抓取所有經過 eth1,目的網絡是 192.168,但目的主機不是 192.168.1.200 的 TCP 數據

# tcpdump -i eth1 ‘((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))‘


linux-基礎知識-23天