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

(0)
lvasulvasu
上一篇 2016-09-12 20:14
下一篇 2016-09-12 20:43

相关推荐

  • shell脚本编程基础(1)

    一.位置变量相关知识     1.位置变量定义:在脚本代码中调用通过命令行传递给脚本的的参数     2.位置变量种类:              &…

    Linux干货 2016-08-15
  • 第七周作业

    第七周 1,创建一个10G分区,并格式化为ext4文件系统;(1) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@www ~]# fdisk /dev/sda <————-fd…

    Linux干货 2017-09-03
  • 马哥教育网络班22期+第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;            [root@test ~]# vim&nbsp…

    Linux干货 2016-10-24
  • linux网络管理(基础-IP、MAC、TCP)

    linux网络管理 计算机网络 MACMAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制、介质访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于…

    Linux干货 2016-09-09
  • 初窥门径shell脚本

    1.什么是shell脚本    首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。确切的说shell脚本就是一些命令的集合。 2.写脚本前的一些细节及建议   Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已…

    Linux干货 2016-08-12
  • 马哥教育网络班21期+第六周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;  ~]# cp /etc/rc.d/rc.sysinit /tmp/  ~]# vim /tmp…

    Linux干货 2016-08-22