Linux之进程管理

本进程管理基于Centos 6 版本

先说一下内核的功用:

  • 进程管理

  • 文件系统

  • 网络功能

  • 内存管理

  • 驱动程序

  • 安全功能等

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

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

  •   UID,GID和SELinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承

  •   存在生命周期

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

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

进程的创建:

  init:第一个进程

  进程都是由其父进程创建,CoW ; fork() ;clone();

进程的优先级:

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

        centos4,5 : 0-139 :各有140个运行队列和过期队列

        centos6  : 0-98,99

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

    Nice值 :-20 到 19 :对应系统优先级100-139或99

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

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

进程的相关概念:

  • 进程内存:

        Page Frame :页框,用来存储页面数据,存储页面大小为4k

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

        MMU :Memory Management Unit 负责转换线性和物理地址

  • 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;jobs;bg;fg;nohup

一些进程管理命令:

pstree 命令: 进程以树的形状显示


ps :process state ;report a snapshot of the current processes

Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

ps可以用来查看进程信息

ps [OPTION]…

   支持三种选项:

    UNIX选项  如-A -e 

    BSD选项  如a 

    GUN选项  如–help

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

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

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

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

• f  选项显示进程的父进程

• o  属性… 选项显示定制的信息:

    pid、comm、%cpu、%mem、state、tty、euser、ruser

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 pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

ni : nice的值

pri : priority 优先级

psr : processor ,CPU 编号

rtprio : 实时优先级

搜索进程

 最灵活: ps [OPTION] | COMMAND

            


pgrep命令 :搜索进程

pgrep [options] pattern

  • -u uid :effective user,生效者

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

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

  • -l :显示进程名

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

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

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

       pidof COMMAND  #pidof bash


uptime 命令

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

blob.png

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

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

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


top 命令:

top中有许多内置命令:

    排序:

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

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

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

    首部信息显示:

        uptime信息: l 命令

        tasks及cpu信息: t 命令

        cpu分别显示: 1(数字)

        memory信息: m 命令

    退出命令: q

    修改刷新时间间隔,默认三秒: s

    终止指定进程: k

    保存文件: W

blob.png

上图框框标记的栏位信息简介:

  • us :用户空间

  • sy :内核空间

  • ni :调整nice时间

  • id :空闲

  • wa :等待IO时间

  • hi :硬中断

  • si :软中断(模式切换)

  • st :虚拟机偷走的时间

blob.png\

上图框框内栏位信息简介:

f命令可以显示,man top 能够显示更加详细的信息

  • PID (Process Id):任务的进程ID 

  • PPID (Parent Process Pid):父任务的进程ID 

  • RUSER (Real User Name):任务的所有者真实名称 

  • UID (User Id):任务所有者ID 

  • USER (User Name):任务所有者名称 

  • GROUP (Group Name):任务所有者群组名 

  • TTY (Controlling Tty):终端 

  • PR (Priority):优先级 

  • %CPU (CPU usage):CPU使用率 

  • %MEM (Memory usage (RES)):内存使用率 

  • S (Process Status):进程状态 

  • TIME+ (CPU Time, hundredths):CPU时间,精确到秒

选项:

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

        -b :以批次方式

        -n # :显示多少批次

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

选项:

    -d # :指定延迟时间

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

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

子命令:

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

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

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

    t :显示进程树

blob.png

自带有帮助,是top命令的升级版

 


内存工具:

vmstat命令: 虚拟内存信息

    vmstat [options] [delay [count]]

    vmstat 2 5   #每两秒显示一次,共显示5次

blob.png

上图栏目信息简介:

procs :

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

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

memory :

    swpd : 交换内存的使用总量

    free : 空闲物理内存的总量

    buffer :用于buffer的内存总量

    cache :用于cache的内存总量

swap :

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

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

io :

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

    bo :保存数据至块设备的速率(kb/s)

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. 

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

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

pmap [options] pid […]

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

pmap 1 或 cat /proc/PID/maps #查看进程PID为1的内存映射关系


glances 命令,需要从EPEL源安装

 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           z  Show/hide processes list

  y  Show/hide hddtemp stats           q  Quit (Esc and Ctrl-C also work)

常用选项:

    -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 :要连入的服务器端地址

blob.png

blob.png

blob.png


dstat 命令: 系统资源统计

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

Versatile tool for generating system resource statistics

blob.png

options:

    -c :显示cpu相关信息

    -d :显示disk相关信息

    -g :显示page相关统计数据

    -m :显示memory相关统计数据

    -n :显示network相关统计数据

    -p :显示process相关统计数据

    -r :显示IO请求相关的统计数据

    -s :显示swapped相关的统计数据

    –tcp  :显示tcp数据包数据

    –udp

    –unix

    –raw

    –socket

    –ipc

    –top-cpu :显示最占用CPU的进程

    –top-io :显示最占用IO的进程

    –top-mem :显示最占用内存的进程

    –top-latency :显示延迟最大的进程

blob.png


kill 命令

向进程发送控制信号,以实现对进程的管理

显示当前系统可以信号 : kill -l

blob.png

常用的信号 : man 7 signal

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

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

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

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

18)SIGCONT :继续运行

19)SIGSTOP :后台休眠

指定信号的方法;

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

(2)信号完整名称 :SIGHUP

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

命令方式:

按PID : kill [-SIGNAL] pid …

按名称 : killall [-SIGNAL] command

按模式 : pkill [options] pattern

    -SIGNAL

    -u uid :effective user ,生效者

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

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

    -l :显示进程名

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

    -P pid :显示父进程为此处指定的进程的进程列表

blob.png

类似文章