美文网首页
Linux进程管理及作业控制

Linux进程管理及作业控制

作者: JevonWei | 来源:发表于2017-07-01 21:27 被阅读0次

    进程概念

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

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

    进程ID(Process ID,PID)号码被用来标记各个进程
    UID、GID、和SELinux语境决定对文件系统的存取和访问权限,
    通常从执行进程的用户来继承
    存在生命周期
    

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

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

    进程创建:

    init :第一个进程
        父子关系
    进程:都由其父进程创建, ,CoW
        fork(), clone()
    
    • 进程优先级

    进程优先级:

    系统优先级:数字越小,优先级越高
        0-139(CentOS4,5)
            各有140个运行队列和过期队列
        0-98,99(CentOS6)
    实时优先级:99-0:值最大优先级最高
    nice值:-20到19,对应系统优先级100-139或99  
    
    • Centos 4,5优先级
    • Centos 6优先级

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

    O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)
    
    • 进程相关概念

    进程内存:

    Page Frame:页框,用存储页面数据,存储Page 4k
    LRU:Least Recently Used近期最少使用算法, 释放内存
    物理地址空间和线性地址空间
    MMU :Memory Management Unit负责转换线性和物理地址
    TLB:Translation LookasideBuffer翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
    

    IPC: Inter Process Communication

    同一主机: signal: 信号
        shm: shared memory
        semaphore: 信号量,一种计数器
    不同主机: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
    

    ps: process state

    ps - report a snapshot of the current processes
    Linux系统各进程的相关信息均保存在/proc/PID 目录下的各文件中
    

    ps查看进程

    适用ps来查看进程信息

    • ps [OPTION]...
      支持三种选项:
    UNIX选项 如-A -e
    BSD选项 如a
    GNU选项 如--help
    

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

    a 选项包括所有终端中的进程
    x 选项包括不链接终端的进程
    u 选项显示进程所有者的信息
    f 选项显示进程的父进程
    k| --sort 属性  对属性 排序
    o 属性…  选项显示定制的信息
        pid、user、comm(cmd)、%cpu、%mem、state、tty、euser(==user为有效用户)、ruser(真实用户)
    

    进程管理工具

    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  (rtprio超出99的不显示)   
    
    • 进程优先级
      进程优先级调整:
    静态优先级:100-139
    进程默认启动时的nice值为0,优先级为120
    只有根用户才能降低nice值(提高优先性)
    

    nice指定优先级命令:

    nice [OPTION] [COMMAND [ARG]...]
    nice -n -20 ping 127.0.0.1 
    

    renice修改优先级命令:

    renice [-n] priority pid...
    renice -n -20 ping 127.0.0.1  修改ping的renice优先级为20
    renice -5 ping 127.0.0.1 修改ping的renice优先级为-5
    renice 5 ping 127.0.0.1 修改ping的renice优先级为5
    

    查看:

    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:显示指定进程的编号,可判断该进程是否存在  
    pidof bash 
    

    系统工具

    uptime

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

    1. 系统平均负载:

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

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

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


    14:34:55 //系统当前时间
    up 2:45,  //主机已运行时间,时间越大,说明你的机器越稳定。
    4 user  //用户连接数,是总连接数而不是用户数
    load average   // 系统平均负载,统计最近1,5,15分钟的系统平均负载
        系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
        如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
        如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
    

    进程管理工具

    top

    选项:
        -d #:指定刷新时间间隔,默认为3秒 
        -b:全部显示所有进程
        -n #:刷新多少次后退出
    

    有许多内置命令

    排序:
        P:以占据的CPU 百分比,%CPU
        M:占据内存百分比,%MEM
        T:累积占据CPU 时长,TIME+
    首部信息显示:
        uptime信息:l 命令
        tasks及cpu信息:t 命令
        cpu分别显示:1 ( 数字)
        memory信息:m 命令
    退出命令:q
    修改刷新时间间隔:s
    终止指定进程:k
    保存文件:W
    

    栏位信息简介

    us:用户空间
    sy:内核空间
    ni:调整nice 时间
    id:空闲
    wa:等待IO 时间
    hi:硬中断
    si:软中断(模式切换)
    st:虚拟机偷走的时间
    

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

    http://172.16.0.1/fedora-epel/7/x86_64
    yum -y install htop

    选项:
        -d #:指定延迟时间;
        -u UserName:仅显示指定用户的进程
        -s COLUME:以指定字段进行排序
    子命令:
    s:跟踪选定进程的系统调用
    l:显示选定进程打开的文件列表
    a:将选定的进程绑定至某指定CPU 核心
    t:显示进程树    
    

    内存工具

    vmstat 命令:虚拟内存信息

    vmstat [options] [delay [count]]
    vmstat 2 5
    

    选项:

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

    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.
    
    • iostat: 统计CPU和设备IO信息

      示例:iostat 1 10 每秒刷新一次,采集10次

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

      pmap [options] pid [...]
      -x: 显示详细格式的信息
      示例:pmap 1

    • 另外一种实现:

      cat /proc/PID/maps

    系统监控工具

    glances 命令:EPEL源

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

    常用选项:

    -b:以Byte为单位显示网卡数据速率
    -d:关闭磁盘I/O模块
    -f /path/to/somefile:设定输入文件位置
    -o {HTML|CSV}:输出格式
    -m:禁用mount 模块
    -n:禁用网络模块
    -t #:延迟时间间隔
    -1:每个CPU
    

    内建命令:

    a Sort processes automatically 
    c Sort processes by CPU% 
    m Sort processes by MEM% 
    p Sort processes by name 
    i Sort processes by I/O rate 
    d Show/hide disk I/O stats 
    f Show/hide file system stats 
    n Show/hide network stats 
    s Show/hide sensors stats 
    y Show/hide hddtemp stats
    l Show/hide logs
    b Bytes or bits for network I/O
    w Delete warning logs
    x Delete warning and critical logs
    1 Global CPU or per-CPU stats
    h Show/hide this help screen
    t View network I/O as combination
    u View cumulative network I/O
    q Quit (Esc and Ctrl-C also work)
    
    • C/S 模式下运行glances命令

      服务器模式:
      glances -s -B IPADDR
      IPADDR:指明监听的本机哪个地址
      客户端模式:
      glances -c IPADDR
      IPADDR:要连入的服务器端地址

    dstat

    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(选项)(参数)
        
        kill [ -s signal | -p ] [ -a ] pid ... 
        kill -l [ signal ] 
    
    选项
        -s:指定发送的信号。 
        -p:模拟发送信号。 
        -l:指定信号的名称列表。 
        -a:当处理当前进程时,不限制命令名和进程号的对应关系;
        -u:指定用户。
        pid:要中止进程的ID号。 
        Signal:表示信号。
    参数
        进程或作业识别号:指定要删除的进程或作业
    
    • 显示当前系统可用信号: kill –l,trap -l
    常用信号:man 7 signal
        1) SIGHUP: 无须关闭进程而让其重读配置文件  
        2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
        3) SIGQUIT:相当于ctrl+\
        9) SIGKILL:强制杀死正在运行的进程
        15) SIGTERM:终止正在运行的进程(默认为15)
        18) SIGCONT:继续运行
            kill -18 3298 将进程ID为3298的程序继续后台运行,停止后台休眠   
        19) SIGSTOP:后台休眠
            kill -19 3298 将进程ID为3298的程序放后台休眠  
    指定信号的方法:
        (1)信号的数字标识:1,2,9
        (2)信号完整名称:SIGHUP 
        (3)信号的简写名称:HUP
    
    • 按PID :kill [-SIGNAL] pid …
    kill –n SIGNAL pid;kill –s SIGNAL pid
    kill -9 1200 
    
    • 按名称:killall [-SIGNAL] comm…
    killall -9 bash   杀死bash程序的所有进程   
    
    • 按模式:pkill [options] pattern
    -SIGNAL
    -u uid:effective user,生效者
    -U uid: real user,真正发起运行命令者
    -t terminal:与指定终端相关的进程
        kill -t /dev/pts/1 杀死/dev/pts/1终端的进程   
    -l:显示进程名(pgrep可用)
    -a:显示完整格式的进程名(pgrep 可用)
    -P pid: 显示指定进程的子进程   
    

    作业管理

    • Linux 的作业控制
    前台作业:通过终端启动,且启动后一直占据终端;
    后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
    
    • 让作业运行于后台
    (1)运行中的作业:Ctrl+z
    (2)尚未启动的作业:COMMAND &
    

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

    nohup COMMAND &  会产生nohup.out文件
        nohup ping 127.0.0.1 &> /dev/null &  产生的nohup.out文件导入null
    screen COMMAND
        screen 先打开会话窗口 
        ping 127.0.0.1 执行命令
    

    终端关闭前ping进程在sshd进程下screen进程下


    终端关闭后,screen进程脱离ssh进程成为独立的进程存在
    • 查看当前终端所有作业:
    jobs
    
    • 作业控制:
    fg [[%]JOB_NUM]:把指定的后台作业调回前台  fg 1 将后台进程ID为1的进程调回前台进行  
    bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
        bg 1  1为进程ID
    kill [%JOB_NUM]:终止指定的作业
    

    并行运行

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

    方法1
        vim all.sh
            f1.sh & <==> ping 127.0.0.1 & 
            f2.sh & <==> ping 192.168.198.134 &
            f3.sh &
    方法2
        (f1.sh &);(f2.sh &);(f3.sh &)
        (ping 127.0.0.1 &);(ping 192.168.198.134 &)
    方法3
        { f1.sh & f2.sh & f3.sh & }
        { ping 127.0.0.1 & ping 192.168.198.134 & }

    相关文章

      网友评论

          本文标题:Linux进程管理及作业控制

          本文链接:https://www.haomeiwen.com/subject/ibpgcxtx.html