• Linux之进程管理


    先说一下内核的功用:

    • 进程管理

    • 文件系统

    • 网络功能

    • 内存管理

    • 驱动程序

    • 安全功能等

    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)

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

    如果每个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

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

    • us :用户空间

    • sy :内核空间

    • ni :调整nice时间

    • id :空闲

    • wa :等待IO时间

    • hi :硬中断

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

    • st :虚拟机偷走的时间

    \

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

    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 命令:需要从EPEL源安装

    选项:

        -d # :指定延迟时间

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

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

    子命令:

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

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

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

        t :显示进程树

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


    内存工具:

    vmstat命令: 虚拟内存信息

        vmstat [options] [delay [count]]

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

    上图栏目信息简介:

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

    dstat 命令: 系统资源统计

    1. Usage: dstat [-afv] [options..] [delay [count]]
    2. Versatile tool for generating system resource statistics

    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 :显示延迟最大的进程

    kill 命令

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

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

    常用的信号 : 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 :显示父进程为此处指定的进程的进程列表

  • 相关阅读:
    centos7系统安装Boost、Cpp-httplib、jsoncpp等库
    【Redis内存数据库】NoSQL的特点和应用场景
    基础算法篇——位运算
    关于pytorch不区分行向量与列向量的理解
    QT多媒体简单应用
    jvm中的cms垃圾回收器和G1垃圾回收器有什么区别
    弘辽科技:淘宝新品怎么打标?有哪些作用?
    RHCE学习 --- 第二次作业
    【Ceph Cluster】完全删除Ceph集群
    pb系统函数:其他函数
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126312007