进程管理

进程概念

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

Process(进程):运行中的程序的一个副本,是被载入内存的一个指令集合

进程ID Process ID PID )号码被用来标记各个进程

UIDGID、和SELinux语境决定对文件系统的存取和访问权限

通常从执行进程的用户来继承

存在生命周期

task struct Linux 内核存储进程信息的数据结构格式

task list :多个任务的的task struct 组成的链表

进程创建:

init :第一个进程

父子关系

进程:都由其父进程创建,CoW

fork(), clone() 

进程优先级

系统优先级: 数字越小,优先级越高

0-139 CentOS4,5

各有140 个运行队列和过期队列

0-98 99 CentOS6

实时优先级: 99-0 :值最大优先级最高

nice值:-2019,对应 系统优先级100-139 99

Big O :时间复杂度,用时和规模的关系

O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)

 

进程相关概念

进程内存:

Page Frame:  页框,用存储页面数据,存储Page 4k

LRULeast Recently Used  近期最少使用算法, 释放内存物理地址空间和线性地址空间

MMUMemory Management Unit 负责转换线性和物理地址

TLB:Translation Lookaside Buffer  翻译后备缓冲器, 用于保存虚拟地址和物理地址映射关系的缓存

IPC: Inter Process Communication

同一主机: signal: 信号

shm: shared memory

semaphore: 信号量,一种计数器

不同主机:rpc: remote procedure call

socket: IP和端口号

 

LRU算法

假设序列为 4 3 4 2 3 1 4 2

物理块有3个,则第14调入内存 423调入内存 3 434调入内存 4 342调入内存 2 4 353调入内存 3 2 4, 61调入内存 1 3 2, 74调入内存 4 1 382调入内存 2 4 1

进程状态

Linux 内核:抢占式多任务

进程类型:

守护进程: daemon, 在系统引导过程中启动的进程,和终端无关进程

前台进程:跟终端相关,通过终端启动的进程

注意:两者可相互转化

        进程状态:

运行态:running

就绪态:ready

睡眠态:可中断:interruptable

不可中断:uninterruptable

停止态:stopped, 暂停于内存,但不会被调度,除非手动启动

僵死态:zombie,结束进程,父进程结束前,子进程不关闭

 

系统管理工具

进程的分类:

CPU-Bound CPU 密集型,非交互

IO-Bound IO 密集型,交互

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

适用ps 来查看进程信息

ps [OPTION]…

支持三种选项:

UNIX 选项如-A -e

BSD 选项如a

GUN 选项如–help

默认显示当前终端中的进程

a 选项包括所有终端中的进程

x 选项包括不链接终端的进程

u 选项显示进程所有者的信息

f 选项显示进程的父进程

o 属性…  选项显示定制的信息:pidcomm%cpu%memstatettyeuserruser

进程管理工具

VSZ: Virtual memory SiZe ,虚拟内存集,线性内存

RSS: ReSident Size,  常驻内存集

STAT:进程状态

R:running 运行

S: interruptable sleeping 可中断休眠

D: uninterruptable sleeping 不可中断休眠

T: stopped 休眠状态

Z: zombie 僵尸状态

+:前台进程

l:多线程进程

L:内存分页并带锁

N:低优先级进程

<:高优先级进程

s: session leader,会话(子进程)发起者

常用组合:-ef

-e:显示所有进程

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

常用组合:-eFH

-F:显示更完整格式的进程信息

-H:以进程层级格式显示进程相关信息

常用组合:自定义

-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:实时优先级

示例:

ps axo pid,cmd,psr,ni,pri,rtprio

进程优先级

进程优先级调整:

静态优先级:100-139

进程默认启动时的nice值为0,优先级为120

只有根用户才能降低nice值(提高优先性)

nice命令:

nice [OPTION] [COMMAND [ARG]…]

查看:

ps axo pid,comm,ni

搜索进程

最灵活:ps选项 | 其它命令

按预定义的模式:pgrep

pgrep [options] pattern

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

-t terminal:  与指定终端相关的进程

-l:显示进程名

-a:显示完整格式的进程名

-P pid:显示指定进程的子进程

按确切的程序名称:/sbin/pidof

pidof bash

系统工具

uptime

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1510分钟的平均负载,一般不会超过1

当前时间 启动总时间 用户登录数 平均负载

系统平均负载:

指在特定时间间隔内运行队列中的平均进程数

通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题

如果linux 主机是1 个双核CPU,当Load Average 6的时候说明机器已经被充分使用。

进程管理工具

top:有许多内置命令:           

排序:

P:以占据的CPU 百分比,%CPU

M:占据内存百分比,%MEM

T:累积占据CPU 时长,TIME+

首部信息显示:

uptime信息:l 命令

taskscpu 信息:t 命令

cpu分别显示:1 ( 数字)

memory 信息:m 命令

退出命令:q

修改刷新时间间隔:s

终止指定进程:k

保存文件:W

top 命令

栏位信息简介

us:用户空间

sy:内核空间

ni:调整nice 时间

id:空闲

wa:等待IO 时间

hi:硬中断

si:软中断(模式切换)

st:虚拟机偷走的时间

选项:

-d #:指定刷新时间间隔,默认为3

-b:以批次方式

-n #:显示多少批次

htop命令:需从Fedora-EPEL 源安装

http://172.16.0.1/fedora-epel/7/x86_64

选项:

-d #:指定延迟时间;

-u UserName: 仅显示指定用户的进程

-s COLUME: 以指定字段进行排序

子命令:

s:跟踪选定进程的系统调用

l:显示选定进程打开的文件列表

a:将选定的进程绑定至某指定CPU 核心

t:显示进程树

 

内存工具

vmstat 命令:虚拟内存信息

vmstat [options] [delay [count]]

vmstat 2 5

procs:

r:等待运行的进程的个数,和核心数有关

b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)

memory

swpd: 交换内存的使用总量

free:空闲物理内存总量

buffer:用于buffer的内存总量

cache:用于cache的内存总量

swap:

si:从磁盘交换进内存的数据速率(kb/s)

so:从内存交换至磁盘的数据速率(kb/s)

io

bi:从块设备读入数据到系统的速率(kb/s)

bo:保存数据至块设备的速率

system

in: interrupts, 中断速率,包括时钟

cs: context switch,进程切换速率

cpu

us:Time spent running non-kernel code

sy: Time spent running kernel code

id: Time spent idle. Linux 2.5.41 , 包括IO-wait time.

wa: Time spent waiting for IO. 2.5.41 前,包括in idle.

st: Time stolen from a virtual machine. 2.6.11 , unknown.

选项:

-s:显示内存的统计数据

iostat: 统计CPU和设备IO信息

示例:iostat  1  10

pmap 命令:进程对应的内存映射

pmap [options] pid […]

-x:  显示详细格式的信息

示例:pmap 1

另外一种实现:

cat /proc/PID/maps

 

系统监控工具

glances 命令:EPEL

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

内建命令:

a Sort processes automatically         自动排序过程

l Show/hide logs                           l显示/隐藏日志

c Sort processes by CPU%             按CPU%排序进程

b Bytes or bits for network I/O       用于网络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             按I/O速率排序进程

1 Global CPU or per-CPU stats          全局CPU或每个CPU统计

d Show/hide disk I/O stats              显示/隐藏磁盘I/O统计

h Show/hide this help screen           显示/隐藏此帮助屏幕

f Show/hide file system stats           显示/隐藏文件系统统计

t View network I/O as combination   将网络I/O视为组合

n Show/hide network stats             显示/隐藏网络统计

u View cumulative network I/O        查看累积网络输入输出

s Show/hide sensors stats q             显示/隐藏传感器统计Q

Quit (Esc and Ctrl-C also work)         退出(ESCCtrl-C

y Show/hide hddtemp stats Y          显示/隐藏hddtemp统计

常用选项:

-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 命令:系统资源统计, 代替vmstat,iostat

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-latency: 显示延迟最大的进程

 

进程管理工具

kill命令:

向进程发送控制信号,以实现对进程管理, 每个信号对应一个数字,信号名称以SIG 开头(可省略 ),不区分大小写,一般检查一个进程

显示当前系统可用信号:kill l,trap -l

常用信号:man 7 signal

1) SIGHUP:  无须关闭进程而让其重读配置文件

2) SIGINT:  中止正在运行的进程;相当于Ctrl+c

3) SIGQUIT: 相当于ctrl+\

9) SIGKILL:  强制杀死正在运行的进程

15) SIGTERM:终止正在运行的进程

18) SIGCONT:继续运行

19) SIGSTOP:后台休眠

指定信号的方法:

(1)信号的数字标识:1, 2, 9

(2)信号完整名称:SIGHUP

(3)信号的简写名称:HUP

PID kill [-SIGNAL] pid

kill n SIGNAL pid;kill s SIGNAL pid

按名称:killall [-SIGNAL] comm

可杀死多个进程

按模式:pkill [options] pattern

-SIGNAL

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

-t terminal:与指定终端相关的进程

-l:显示进程名(pgrep 可用)

-a:显示完整格式的进程名(pgrep 可用)

-P pid:显示指定进程的子进程

 

作业管理

Linux 的作业控制

前台作业:通过终端启动,且启动后一直占据终端;

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

让作业运行于后台

(1)运行中的作业:Ctrl+z

(2)尚未启动的作业:# COMMAND &

ping 127.0.0.1 &

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

# nohup COMMAND &

#screen;COMMAND

查看所有作业:

# jobs  可查看编号

[1]+  Running                 ping 127.0.0.1 &

作业控制:

# fg [[%]JOB_NUM] :把指定的后台作业调回前台

如果编号为1fg 1

# bg [[%]JOB_NUM] :让送往后台的作业在后台继续运行

如果编号为1bg 1

# kill [%JOB_NUM] :终止指定的作业

如果编号为1Kill % 1,即可停止

并行运行

同时运行多个进程,提高效率

方法1

vi all.sh

f1.sh&

f2.sh&

f3.sh&

方法2

(f1.sh&);(f2.sh&);(f3.sh&)

方法3

{ f1.sh& f2.sh& f3.sh& }

 

原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/75133

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班