linux进程管理

进程概念

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等
Process:  运行中的程序的一个 副本,是被 载入内存的一个指令集合
    进程ID (Process ID,PID)号码被用来标记各个进程
    UID 、GID、和SELinux语境决定对文件系统的存取和访问权限,
    通常从执行进程的用户来继承
    存在生命周期
task struct:Linux内核存储进程信息的数据结构格式
task list :多个任务的的task struct 组成的链表
进程创建:
    init :第一个进程
       父子关系
    进程:都由其父进程创建,COW       fork(), clone()

进程优先级

进程优先级:

imageimage

系统优先级: 数字越小,优先级越高
0-139(CentOS4,5)默认为120
    各有140 个运行队列和过期队列
    运行队列和过期队列互换**        
0-98,99(CenOS6)
实时优先级: 99-0 :值最大优先级最高
Nice 值:-20,19对应系统优先级100-139或99
Big O :时间复杂度,用时和规模的关系
O(1), 
O(logn), 
O(n) 线性, 
O(n^2) 抛物线, 
O(2^n)

image

进程相关概念

进程内存:
Page Frame:  页框,用存储页面数据,存储Page 4k
LRU :Least Recently Used  近期最少使用算法, 释放内存
    物理地址空间和线性地址空间
MMU :Memory Management Unit负责转换线性和物理地址
IPC: Inter Process Communication
同一主机上
    signal
    shm: shared memory
    semophore  信号量,一种计数器
不同主机上:
    rpc: remote procedure call
    socket: IP和端口号

进程状态

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
  -p:列举编号
ps: process state
ps - report a snapshot of the current processesLinux系统各进程的相关信息均保存在/proc/PID 目录下的各文件中

进程管理工具

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 ,会话(子进程)发起者

列举进程ps

适用ps 来查看进程信息  ps [OPTION]...
支持三种选项:
     
    UNIX 选项如-A -e
    BSD 选项如 a
    GUN 选项如--help
• 默认显示当前终端中的进程
• a 选项包括所有终端中的进程
• x 选项包括不连接终端的进程
• u 选项显示进程所有者的信息

image

• f 选项显示进程的父进程
• o 属性… 选项显示定制的信息:o必须在最后
# ps axo pid,comm,%cpu,%mem,state,tty,euser,ruser

image

常用组合:
-ef  
-e:  显示所有进程 ==ax-f:  显示完整格式程序信息

image

-eFH    -F:显示更完整格式的进程信息    -H:以进程层级格式显示进程相关信息(父子进程关系)
优先级
ni: nice值pri: priority ,优先级psr: processor, CPU 编号rtprio: 实时优先级
自定义
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
    pid,    进程ID
    tid,    线程ID    class,  类型
    rtprio,实时优先级
    ni,    nice优先级
    pri,    实时优先级
    psr,    cpu编号
    pcpu,   CPU占用率
    stat,   进程状态
    comm    发起命令
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
    euid,   有效用户ID   进程执行者
    ruid,   实际用户ID   进程发起者
    tty,     终端号
    tpgid,  控制tty进程组ID
    sess,    会话ID
    pgrp,    进程组ID
    ppid,    父进程ID
参数 描述
pcpu CPU占用率
pid 进程ID
ppid 父进程ID
pmem 内存使用率
comm 可执行文件
cmd 简单命令(simplecommand)
user 启动进程的用户
nice 优先级(niceness)
time 累计的CPU时间
etime 进程启动后累计时间
tty 当前终端进程
euid 有效用户ID 进程执行者
stat 进程状态
ruid 真实用户ID 进程发起者

搜索进程

最灵活:ps  选项 |  其它命令按预定义的模式:pgrep
pgrep [options] pattern
-u uid: effective user,生效者-U uid: real user ,真正发起运行命令者-t terminal:  与指定终端相关的进程-l: 显示进程名
# pgrep -t pts/1 -l
-a: 显示完整格式的进程名(centos6无效)
# pgrep -t pts/0 -a
-P  pid:显示指定进程的子进程
# pgrep -P 3522 -l
按确切的程序名称:/sbin/pidof$pidof bash
[root@lvasu ~]# pidof bash3457
系统工具
uptime:
显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1 、5 、10 分钟的平均负载,一般不会超过1)
[root@lvasu ~]# uptime
 23:47:00 up  2:05,  4 users,  load average: 0.06, 0.05, 0.05
系统平均负载:
指在特定时间间隔内运行队列中的平均进程数 。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。 如果每个CPU 内核的任务数大于5 ,那么这台机器的性能有严重问题。
如果linux 主机是1 个双核CPU 的话,当Load Average 为6 的时候说明机器已经被充分使用了。

进程管理工具

top :有许多内置命令:
排序: (CAPM)
P :以占据的CPU 百分比,%CPUM :占据内存百分比,%MEM
T :累积占据CPU 时长,TIME+
首部信息显示:
uptime 信息: l显示
tasks 及cpu 信息:t 显示
cpu 分别显示:1 ( 数字)memory 信息:m 命令
      
退出命令:q修改刷新时间间隔:s #   单位s 
终止指定进程:k
保存文件:W   (CAPS)   
       位置 /root/.toprc
栏位信息简介
us :用户空间
sy :内核空间
ni :调整nice 时间
id :空闲
wa :等待IO 时间
hi :硬中断
si :软中断(模式切换)
st :虚拟机偷走的时间


PID (Process Id): 任务的进程ID
PPID (Parent Process Pid): 父任务的进程ID
RUSER (Real User Name): 任务的所有者真实名称
UID (User Id): 任务所有者IDUSER (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 源安装http://172.16.0.1/fedora-epel/7/x86_64
    
选项:
-d #:    指定延迟时间;
-u UserName:  仅显示指定用户的进程;-s COLUME:  以指定字段进行排序;子命令:(htop 界面实现)
    s:  跟踪选定进程的系统调用;
    l:  显示选定进程打开的文件列表;
    a:将选定的进程绑定至某指定CPU 核心;
    t:显示进程树

内存工具

vmstat 命令:虚拟内存信息
vmstat [options] [delay [count]]
    vmstat 2 5

image

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 codesy: Time spent running kernel codeid: 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:  显示内存的统计数据
pmap 命令 :进程对应的内存映射
pmap [options] pid [...]
    -x:  显示详细格式的信息;
    # pmap 1

image

另外一种实现:    # cat /proc/PID/maps
[root@lvasu ~]# cat /proc/1/maps

系统监控工具

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 logsc Sort processes by CPU% b Bytes or bits for network I/Om Sort processes by MEM% w Delete warning logsp Sort processes by name x Delete warning and critical logsi Sort processes by I/O rate 1 Global CPU or per-CPU statsd Show/hide disk I/O stats h Show/hide this help screenf Show/hide file system stats t View network I/O as combinationn 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 -s -B 10.1.27.100
客户端模式:
    glances -c IPADDR
    IPADDR :要连入的服务器端地址
# glances -c 10.1.27.101
dstat 命令:系统资源统计
dstat [-afv] [options..] [delay [count]]
    -c:  显示cpu 相关信息      -C #,#,...,total      include cpu0, cpu3 and total    -d:  显示disk 相关信息      -D total,sda,sdb,...   include hda and total    -g :显示page 相关统计数据    -m:  显示memory 相关统计数据    -n:  显示network 相关统计数据    -p:  显示process 相关统计数据    -r:  显示io 请求相关的统计数据    -s:  显示swapped 相关的统计数

image

--tcp--udp--unix--raw--socket--ipc--top-cpu :显示最占用CPU 的进程--top-io:  显示最占用io 的进程--top-mem:  显示最占用内存的进程--top-latency:  显示延迟最大的进程

image

进程管理工具

kill 命令:
  向进程发送控制信号,以实现对进程管理
  显示当前系统可用信号: kill -l
  常用信号:man 7 signal    1) SIGHUP:  无须关闭进程而让其重读配置文件    2) SIGINT:  中止正在运行的进程;相当于Ctrl+c    9) SIGKILL:  杀死正在运行的进程    15) SIGTERM :终止正在运行的进程  (正常关闭,默认15)    18) SIGCONT :继续运行    19) SIGSTOP :后台休眠
  指定信号的方法:
     (1)  信号的数字标识;1, 2, 9
     (2)  信号完整名称;SIGHUP
     (3)  信号的简写名称;HUP
      
按PID :kill [-SIGNAL] pid …
按名称:killall [-SIGNAL] comm…
# killall -9 ping
按模式:pkill [options] pattern
    -SIGNAL    -u uid: effective user ,生效者    -U uid: real user ,真正发起运行命令者    -t terminal:  与指定终端相关的进程    -l: 显示进程名    -a: 显示完整格式的进程名    -P pid:  显示父 进程为此处指定的进程的进程列表
# pkill -u root# pkill -9 -t pts/1

进程优先级

进程优先级调整:
    静态优先级:100-139
    进程默认启动时的nice值为0 ,优先级为120
    只有根用户才能降低nice值(提高优先性)
nice 命令:
    nice [OPTION] [COMMAND [ARG]...]
    nice -n -5 htop 
renice 命令:
    renice [-n] priority pid...  运行中的进程
查看:
    ps axo pid,comm,ni

未涉及到的命令

sat,tsar,lostat,lftop,nethog,....

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

联系我们

400-080-6560

在线咨询

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

QR code