【Linux】【Basis】进程及作业管理

进程及作业管理
 
    内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能
 
    Process: 运行中的程序的一个副本;
        存在生命周期
 
    Linux内核存储进程信息的固定格式:task struct
        多个任务的的task struct组件的链表:task list
 
    进程创建:
        init
            父子关系
            进程:都由其父进程创建
                fork(), clone()
 
        进程优先级:
            0-139:
                1-99:实时优先级;
                100-139:静态优先级;
                    数字越小,优先级越高;
 
                Nice值:
                    -20,19
 
            Big O
                O(1), O(logn), O(n), O(n^2), O(2^n)
 
        进程内存:
            Page Frame: 页框,用存储页面数据
                存储Page
 
                MMU:Memory Management Unit
 
        IPC: Inter Process Communication
            同一主机上:
                signal
                shm: shared memory
                semerphor
 
            不同主机上:
                rpc: remote procecure call
                socket:
 
    Linux内核:抢占式多任务
 
        进程类型:
            守护进程: 在系统引导过程中启动的进程,跟终端无关的进程;
            前台进程:跟终端相关,通过终端启动的进程
                注意:也可把在前台启动的进程送往后台,以守护模式运行;
 
        进程状态:
            运行态:running
            就绪态:ready
            睡眠态:
                可中断:interruptable
                不可中断:uninterruptable
            停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped
            僵死态:zombie
 
        进程的分类:
            CPU-Bound
            IO-Bound
 
        《Linux内核设计与实现》,《深入理解Linux内核》                   
             
    Linux系统上的进程查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup, nice, renice, killall, ...
         
        CentOS 5:  SysV init
        CentOS 6:upstart
        CentOS 7:systemd
         
            /sbin/init,
         
        pstree命令:
            pstree  - display a tree of processes
             
        ps命令:
            /proc/:内核中的状态信息;
                内核参数:
                    可设置其值从而调整内核运行特性的参数;/proc/sys/
                    状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;
                     
                参数:模拟成文件系统类型;
                 
            进程:
                /proc/#:
                    #:PID
                 
            ps - report a snapshot of the current processes.
             
                ps [options]:
                    选项有三种风格:
                        1   UNIX options, which may be grouped and must be preceded by a dash.
                        2   BSD options, which may be grouped and must not be used with a dash.
                        3   GNU long options, which are preceded by two dashes.
                     
                    启动进程的方式:
                        系统启动过程中自动启动:与终端无关的进程;
                        用户通过终端启动:与终端相关的进程;
                         
                    选项:
                        a:所有与终端相关的进程;
                        x:所有与终端无关的进程;
                        u:以用户为中心组织进程状态信息显示;
                         
                        常用组合之一:aux
                            VSZ:虚拟内存集;
                            RSS:Resident Size,常驻内存集;
                            STAT:
                                R:running
                                S:interruptable sleeping
                                D:uninterruptable sleeping
                                T:Stopped
                                Z:zombie
                                 
                                +:前台进程
                                l:多线程进程
                                N:低优先级进程
                                <:高优先级进程
                                s:session leader
                                 
                        -e:显示所有进程
                        -f:显示完整格式的进程信息
                         
                        常用组合之二:-ef
                         
                        -F:显示完整格式的进程信息;
                            C: cpu utilization
                            PSR:运行于哪颗CPU之上
                        -H:以层级结构显示进程的相关信息;
                         
                        常用组合之三:-eFH
                         
                        常用组合之四:-eo, axo
                            o  field1, field2,...:自定义要显示的字段列表,以逗号分隔;
                                常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
                                    ni:nice值;
                                    priority:priority, 优先级;
                                    rtprio:real time priority,实时优先级;
                                     
            pgrep, pkill命令:
                - look up or signal processes based on name and other attributes
                 
                pgrep [options] pattern
                    -u uid:effective user
                    -U uid:read user
                    -t  TERMINAL:与指定的终端相关的进程;
                    -l:显示进程名;
                    -a:显示完整格式的进程名;
                    -P pid:显示此进程的子进程;
                     
            pidof命令:
                根据进程名,取其pid;
                 
            top命令:
                - display Linux processes
                 
                排序:
                    P:以占据CPU百分比排序;
                    M:以占据内存百分比排序;
                    T:累积占用CPU时间排序;
                     
                首部信息:
                    uptime信息:l命令
                    tasks及cpu信息:t命令
                    内存信息:m命令
                     
                退出命令:q
                修改刷新时间间隔:s
                终止指定的进程:k
                 
                选项:
                    -d #:指定刷新时间间隔,默认为3秒;
                    -b:以批次方式显示;
                    -n #:显示多少批次;
                 
            uptime命令:显示系统时间、运行时长及平均负载;
                过去1分钟、5分钟和15分钟的平均负载;
                    等待运行的进程队列的长度;
                     
回顾: Linux OS基础概念、进程查看的几工具;
 
    内核的功能:进程管理(进程调度)
        进程调度:保存现场,恢复现场;
            task struct:任务结构;
            task list:任务列表;
         
        CPU:us, sy, ni, id, hi, si, cs, st
        Memory:VSZ,RSS,SHM
         
    命令: pstree, pgrep, pkill, ps, top, uptime
     
Linux进程及作业管理(2)
 
    CentOS 6: http://172.16.0.1/fedora-epel/
    CentOS 7: http://172.16.0.1/fedora-epel/
     
    进程管理类命令:
     
        htop命令:
            选项:
                -d #:指定延迟时间间隔;
                -u UserName:仅显示指定用户的进程;
                -s COLUME:以指定字段进行排序;
            子命令:
                l:显示选定的进程打开的文件列表;
                s:跟踪选定的进程的系统调用;
                t:以层级关系显示各进程状态;
                a:将选定的进程绑定至某指定的CPU核心;
                 
        vmstat命令:
            - Report virtual memory statistics
             
            vmstat  [options]  [delay [count]]
                procs:
                    r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
                    b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
                memory:
                    swpd:交换内存使用总量;
                    free:空闲的物理内存总量;
                    buffer:用于buffer的内存总量;
                    cache:用于cache的内存总量;
                swap
                    si:数据进入swap中的数据速率(kb/s)
                    so:数据离开swap的速率(kb/s)
                io
                    bi:从块设备读入数据到系统的速度(kb/s)
                    bo:保存数据至块设备的速率(kb/s)
                system
                    in:interrupts,中断速率;
                    cs:context switch, 上下文 切换的速率;
                cpu
                    us: user space
                    sy:system
                    id:idle
                    wa:wait
                    st: stolen
         
            选项:
                -s:显示内存统计数据;
                 
        pmap命令:
            - report memory map of a process
             
            pmap [options] pid [...]
                -x:显示详细格式的信息;
                 
            另一种查看方式:cat  /proc/PID/maps
             
        glances命令:
            - A cross-platform curses-based monitoring tool
             
            内建命令:
                 
            常用选项:
                -b:以Byte为单位显示网上数据速率;
                -d:关闭磁盘I/O模块;
                -m:关闭mount模块;
                -n:关闭network模块;
                -t #:刷新时间间隔;
                -1:每个cpu的相关数据单独显示;
                -o {HTML|CSV}:输出格式;
                -f  /PATH/TO/SOMEDIR:设定输出文件的位置;
             
            C/S模式下运行glances命令:
                服务模式:
                    glances  -s  -B  IPADDR
                     
                    IPADDR:本机的某地址,用于监听;
                     
                客户端模式:
                    glances  -c  IPADDR
                     
                    IPADDR:是远程服务器的地址;
                     
        dstat命令:
            - versatile tool for generating system resource statistics
             
            dstat [-afv] [options..] [delay [count]]
             
            常用选项:
                -c, --cpu:显示cpu相关信息;
                    -C #,#,...,total
                -d, --disk:显示磁盘的相关信息
                    -D sda,sdb,...,tobal
                -g:显示page相关的速率数据;
                -m:Memory的相关统计数据
                -n:Interface的相关统计数据;
                -p:显示process的相关统计数据;
                -r:显示io请求的相关的统计数据;
                -s:显示swapped的相关统计数据;
                 
                --tcp
                --udp
                --raw
                --socket
                 
                --ipc
                 
                --top-cpu:显示最占用CPU的进程;
                --top-io:最占用io的进程;
                --top-mem:最占用内存的进程;
                --top-lantency:延迟最大的进程;
                 
        kill命令:
             
            - terminate a process
             
            用于向进程发送信号,以实现对进程的管理;
             
            显示当前系统可用信号:
                kill -l [signal]
                 
                每个信号的标识方法有三种:
                    1) 信号的数字标识;
                    2) 信号的完整名称;
                    3) 信号的简写名称;
                     
            向进程发信号:
                kill  [-s signal|-SIGNAL]  pid...
                 
                常用信号:
                    1) SIGHUP:无须关闭进程而让其重读配置文件;
                    2)SIGINT:终止正在运行的进程,相当于Ctrl+c
                    9)SIGKILL:杀死运行中的进程;
                    15)SIGTERM:终止运行中的进程;
                    18)SIGCONT:
                    19)SIGSTOP:
                     
        killall命令:
             
            - kill processes by name
             
            killall  [-SIGNAL]  program
             
    Linux系统作业控制:
         
        job:
            前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
            后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);
             
        如何让作业运行于后台?
            (1) 运行中的作业
                Ctrl+z
                注意:送往后台后,作业会转为停止态;
            (2) 尚未启动的作业
                # COMMAND &
                 
                注意:此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系:
                    # nohup  COMMAND  &
                     
        查看所有的作业:
            # jobs
             
        可实现作业控制的常用命令:
            # fg  [[%]JOB_NUM]:把指定的作业调回前台;
            # bg  [[%]JOB_NUM]:让送往后台的作业在后台继续运行;
            # kill  %JOB_NUM:终止指定的作业;
             
    调整进程优先级:
         
        可通过nice值调整的优先级范围:100-139
            分别对应于:-20, 19
             
        进程启动时,其nice值默认为0,其优先级是120;
         
        nice命令:
            以指定的nice值启动并运行命令
                # nice  [OPTION]  [COMMAND [ARGU]...]
                    选项:
                        -n NICE
                         
                注意:仅管理员可调低nice值;
                 
        renice命令:
            # renice  [-n]  NICE  PID...
             
        查看Nice值和优先级:
            ps  axo  pid, ni, priority, comm 
             
    未涉及到的命令:sar,  tsar,  iostat,  iftop,  nethog,  ...
     
    博客作业: htop/dstat/top/ps命令的使用;
原文地址:https://www.cnblogs.com/demonzk/p/6297062.html