Linux系统进程管理

本章学习内容

    ——进程概念

    ——进程创建、切换和撤销

    ——进程调度

    ——进程分类

    ——进程状态

    ——进程管理工具

引言

    在linux系统中,内核的功用有:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等,在这众多的模块中,进程管理是相对重要的一环,即使不像文件系统和网络功能那么复杂。在进程管理中,内核对进程的创建、切换、撤销和调度都有很详细的定义。

1、进程及相关概念   

    <1>进程:进程可以理解为程序执行的一个有生命周期的实例,有唯一的PID来标识,它包括可执行程序以及与其相关的系统资源,比如打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间及包含全局变量的数据段等。从内核的角度看,进程也可以称为任务。

    <2>进程描述符:与进程相关的事情非常多,比如进程的PID、状态、进程的优先级、进程的地址空间、允许该进程访问的文件等等,Linux内核为此专门设计了一个类型为task_struct的结构体,称之为进程描述符。进程描述符中包含了内核管理进程的所有信息,可以说,只要得到一个进程的进程描述符,就可以知道一个进程的所有信息。

2、进程的创建、切换和撤销

    <1>进程创建在系统启动时,会先在CPU上加载内核,之后内核创建第一个进程init(centos7上是systemd),init通过系统调fork()创建各种各样的子进程,各进程之间遵循Cow机制(即修改数据才分配内存)。

    <2>进程切换:进程切换又称为任务切换、上下文切换。它是这样一种行为,为了控制进程的执行,内核挂起当前在CPU上运行的进程,并恢复以前挂起的某个进程的执行。

    <3>撤销进程:进程终止后,需要通知内核以便内核释放进程所拥有的资源,包括内存、打开文件以及其他资源,如信号量

3、进程调度    

    <1>调度策略:调度策略就是这样一组规则:决定什么时候以怎样的方式选择一个新进程运行。所以定义一个进程的优先级来满足这样一种策略。这个策略以0-139的优先级来表示。

           实时优先级:1-99

               无需调整,数字越大,优先级越高

           静态优先级:100-139

               可调整,数字越小,优先级越高

  wKiom1fRULmwe7ecAAAPyP-t1oo636.png

优先级以Nice值调整

    Nice:-20—-19 ,存在于task_struct结构体中  

公式如下:        

pri(new)=nice+pri(old)    

    <2>调度算法:早起的Linux中,调度算法是根据进程的优先级选择“最佳”进程来执行,它的缺点是时间开销与“可运行进程数量”有关。某种调度算法一定满足一种函数关系,业界称为Big O        

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

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

4、进程类型 

    <1>进程的分类标准一: 

       守护进程: 监控非独立服务的进程

       普通进程:只负责自己本身服务的提供

       注意:两者可相互转化   

    <2>进程的分类标准二:

       CPU-Bound:CPU密集型,非交互(图形)

       IO-Bound:IO密集型,交互(操作)

5、进程状态 

   在内存中运行的进程也有着各种各样的状态

        运行态R:running

        就绪态:ready

        睡眠态

            可中断S:interruptable

            不可中断D:uninterruptable

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

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

6、进程作业

进程在运行时,我们可以称其为作业,根据其运行的环境,可分为前台作业和后台作业

wKiom1fRWKXTQd5KAAAqYeVP2i0239.png

注:ctrl+z、ctrl+c只对前台运行的进程有效,jobs查看作业。

后台运行的程序如果有标注输出,比如ping,ctrl+z,ctrl+c无法生效。要杀死进程才可以。

也可以使用kill向进程发信号

    <1>常用信号:man 7 signal

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

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

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

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

18) SIGCONT:继续运行

19) SIGSTOP:后台休眠

    <2>指定信号的方法:

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

(2) 信号完整名称;SIGHUP

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

补充:killall COMMAND:杀死所有COMMAND进程

      pkill -u USER:杀死所有以USER身份运行的进程

      pkill -u root:危险操作,切勿模仿

既然进程可以运行在后台,提供一种方法将多个进程同时运行在后台,增强效率。

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

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

    或者写在一个脚本中。 

    vi all.sh

    f1.sh&

    f2.sh&

    f3.sh&

7、进程管理工具

<1>ps axu

wKioL1fPsIDCHV0BAAGF6aa_zDI491.jpg

USER 运行进程的用户
PID 进程ID
%CPU 占用CPU
%MEM 占用内存
VSZ 虚拟内存集
RSS 实际内存集
TTY 终端信息
STAT 进程状态
START 进程状态
TIME 运行时间
COMMAND 进程名称

也可以通过特定的选项来显示信息

  ps -axo pid、comm、%cpu、%mem、state、tty、euser、ruser

  wKiom1fPs0rimN5zAADe2LSLPlE923.jpg

  以上也证明了passwd适用于suid权限的,虽然运行用户是user,但其真正有效的是root

<2>uptime

wKioL1fPuy7A5Su5AABP2Afi92E316.jpg

开机时间

运行时间

登陆用户数目

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

    第一分钟负载

    第五分钟负载

    第十分钟负载

    注意:1、5、10分钟的平均负载,一般不会超过1                            

    参考值:如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。

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

<3>top

wKiom1fPwpTyoAdnAAI5SPDB4JM569.jpg

Tasks

total 进程总数
running 运行进程数
sleeping 休眠态进程数
stopped 停止态进程数
zobie 僵死态进程数

%Cpu(s)

us(user space) 用户空间占用CPU百分比
sy(system) 内核空间占用CPU百分比   注:高负载时:us:sy=7:3
ni(nice) 修改nice值占用的CPU百分比
id(idle)  空闲的CPU百分比
wa(wait)  等待IO完成占用的CPU百分比
hi(hardware interrupt)  硬中断占用CPU百分比
si(software interrupt) 软中断占用CPU百分比
st(stole) 被偷走的CPU,比如VMware

buffer(缓冲) 元数据
cache(缓存) 数据

PID 进程号
USER 进程发起者
PR(priority) 优先级
NI(Nice) nice值
VIRT 虚拟内存集
RES 常驻内存集
SHR 共享内存集
S(status) 状态
%CPU CPU占用比
%MEM 内存占用比
TIME+ 运行时长
COMMAND 启动进程

对显示排序的方法:

P 占据的CPU百分比
M 占据内存百分比
T 累积占据CPU时长

首部信息显示:

l uptime信息
t tasks及cpu信息
#数字 cpu分别显示
m memory信息
s 修改刷新时间间隔
Esc 退出
k 终止指定进程
W 保存文件
q 退出命令

注:

直接查看进程编号  pidof COMMAND  或者  ps aux | grep **—–>kill

<4>htop

wKiom1fP0BCjzJ8vAAUL53ILZdo725.jpg

比top更加高级的进程管理软件

f1帮助

f2切换CPU、mem、swap显示方式

f10退出

选中进程执行k

<5>vmstat:查看磁盘吞吐量

wKiom1fP0tOQA_Q4AADefO6sBf8620.jpg

vmstat -s: 内存的汇总信息

r 等待运行的进程的个数,和核心数有关
b 处于不可中断睡眠态的进程个数(被阻塞的队列的长度)

swap:

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

io:

bi 从块设备读入数据到内存的速率(kb/s)    读
bo 从内存写入磁盘的速率(kb/s)            写

分别使用 dd if=/dev/sda of=/dev/null

         dd if=/dev/sda of=/tmp/f1 可做测试

<6>glanceswKioL1fP2EiAUlFZAARQ8reM570930.jpg    h: 帮助信息                                                                                特性C/S结构

Server端:glances -s -B IP

Client端:glances -c IP                                                                    <7>dstat

wKiom1fP2oGhaLMMAAHqNGgIo9o300.jpg

磁盘的读写可通过dd if=/dev/sdb of=/dev/zero 测试

网络监控可通过ping -f IP -s 65507测试。                     

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

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 11:14

    总结的很棒,对进程管理基础与命令介绍的很详细哦。赞一个