• Linux进程相关管理(ps、top、kill)


    目录

    一、概念

    二、查看进程

    1、ps命令查看进程

    1)ps显示某个时间点的程序运行情况

    2)查看指定的进程信息

    2、top命令查看进程

    1)信息统计区:

    2)进程信息区

    3)交互式命令

    三、信号控制进程

    四、作业控制


    一、概念

    程序:二进制文件,文件存储在磁盘中,例如/usr/bin/目录下

    进程:当运行可执行文件后,会被装载到内存中,接着CPU会执行程序中的每一条指令,这时这个运行中的程序,就被称为进程(进程是已启动的可执行程序的运行实例)。

    线程:是操作系统能够进行运算调度的最小单位。

              它被包含在进程之中,是进程中的实际运作单位。

              一条线程指的是进程中一个单一顺序的控制流(线程是进程当中的一条执行流程),一个进程中可以并发多个线程,每条线程并行执行不同的任务。


    • 进程和程序不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
    • 进程具有并发性和交往性,而程序是封闭的
    • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
    • 线程不能单独执行,但每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
    • 同一个进程内多个线程之间可以共享代码块、数据段、打开的文件等资源,但每个流程都有独立的寄存器和栈,这样可以确保线程的控制流是相对独立的
    • 进程是资源分配的单位,线程是CPU调度的单位;进程拥有一个完整的资源平台,而线程只独享必不可少的资源。

    进程分类:

    二、查看进程

    在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。

    比较完整的进程状态变迁图:

    (注:图片来自进程和线程之间有什么根本性的区别? - 知乎) 

    1、ps命令查看进程

    1)ps显示某个时间点的程序运行情况

            -a :显示所有用户的进程

            -u :显示用户名和启动时间

            -x :显示没有控制终端的进程

            -e :显示所有进程,包括没有控制终端的进程

            -l长格式显示

            -w宽行显示,可以使用多个 w 进行加宽显示

            -f:做一个更完整的输出

    # 查看当前用户的进程

    [root@localhost ~]# ps -l

    F——程序标识,说明程序的权限

              4表示此程序的权限为root,1表示此子程序仅进行复制而没有实际执行

    S——程序状态(STAT)

            R(Running):该程序正在运作中;

            S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;

            D不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;

            T停止状态(stop),可能是在工作控制(后台暂停)或traced状态;

            Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。

            +:位于前台的进程组

    UID——代表此程序被该UID所拥有

    PID——程序的PID号码

    PPID——此程序的父进程PID号码。

    C——CPU使用率,单位为百分比

    PRI(Priority),NI(Nice)

            ——代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执行

    ADDR/SZ/WCHAN:都与内存有关。

    ADDR——kernel funcition,指出该程序在内存的哪个部分,如果是 running的程序,一般会显示-。

    SZ——代表此程序用掉多少内存

    WCHAN——表示目前程序是否运作中,若为-表示正在运行。

    TTY——登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。

    TIME——使用掉的CPU时间,即此程序实际花费CPU运作的时间。

    CMD——触发此进程的指令是什么。

    [root@localhost ~]# ps -u

    [root@localhost ~]# ps aux |less

    USER: 运行进程的用户

    PID: 进程ID

    %CPU: CPU占用率

    %MEM: 内存占用率

    VSZ: 占用虚拟内存

    RSS: 占用实际内存 驻留内存

    TTY: 进程运行的终端

    STAT: 进程状态 man ps (/STATE)

            R         运行

            S         可中断睡眠 Sleep

            D         不可中断睡眠

            T         停止的进程

            Z         僵尸进程

            X         死掉的进程

            s          进程的领导者,父进程 <

            <         优先级较高的进程

            N         优先级的进程

            +          表示是前台的进程组

            l           以线程的方式运行

    START: 进程的启动时间

    TIME: 进程占用CPU的总时间

    COMMAND: 进程文件,进程名

    #自定义显示字段

    [root@localhost ~]#  ps axo user,pid,ppid,%mem,command

    # 查看进程树

    [root@localhost ~]# pstree
     

    2)查看指定的进程信息

    1. [root@localhost ~]# ps aux |grep sshd
    2. [root@localhost ~]# cat /run/sshd.pid
    3. 1210

    1. # 查看远程连接sshd的所有进程
    2. [root@localhost ~]# pgrep -l sshd
    3. # 如果把sshd服务全都关掉(killall sshd)之后需在虚拟机上重启sshd服务,才能进行远程连接
    4. [root@localhost ~]# systemctl start sshd

    2、top命令查看进程

    格式:top [-d 数字] | [-bnp]

    选项:

            -d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒

            -b:以批次的方式执行top;通常会搭配数据流重定向来将批处理的结果输出为文件。

            -n:与-b搭配,进行几次top的输出结果

            -i: 不显示闲置或者僵死的进程信息

            -c:显示进程的整个命令路径,而不是只显示命令名称

            -s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险

            -p:指定某些个PID来进行查看检测

    1. [root@localhost ~]# top -d 1
    2. [root@localhost ~]# top -d 1 -p 3598 #查看指定进程的动态信息
    3. [root@localhost ~]# top -d 1 -p 10126,1
    4. [root@localhost ~]# top -d 1 -u root #查看指定用户的进程
    5. #将2次top信息写入到文件
    6. [root@localhost ~]# top -d 1 -b -n 2 > top.txt

    top的输出可分为统计信息区(前五行)和进程信息区

    1)信息统计区:

    第一行为任务队列信息

    top - 14:12:56 up  2:15,  5 users,  load average: 0.01, 0.08, 0.11

    14:12:56 表示当前系统时间        up 2:15 表示系统已启动4小时32分钟

    5 users 表示当前登录系统的用户数

    load average: 0.01, 0.08, 0.11 表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果 是1表示满负载)

    第二行

    Tasks: 315 total,   2 running, 313 sleeping,   0 stopped,   0 zombie

    315 total 进程的总数        2 running 正在运行的进程数        313 sleeping 处于休眠的进程数

    0 stopped 停止的进程数        0 zombie 僵死的进程数

    第三行

    %Cpu(s):  0.5 us,  0.5 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

    0.5 us 表示进程占用CPU的百分比        0.5 sy 系统进程占用CPU的百分比

    0.0 ni 用户进程空间内改变过优先级的进程占用CPU的百分比

    99.0 id 空闲CPU占用的百分比

    0.0 wa 代表I/Owait表示等待输入、输出的进程占用CPU的百分比

    0.0 hi 表示cpu服务于硬件中断所耗费的时间总额

    0.0 si 表示cpu服务于软件中断所耗费的时间总额     0.0 st表示虚拟机被hypervisor偷去的cpu时间。(另外,如果是多内核设备,可按下数字键“1” 来切换成不同cpu的负载率)

    第四五行

    1. MiB Mem : 1750.8 total, 100.4 free, 1241.1 used, 576.3 buff/cache
    2. MiB Swap: 2048.0 total, 2026.2 free, 21.8 used. 509.7 avail Mem

    total系统的内存大小;free目前空余内存大小;used已经使用的内存大小

    2)进程信息区

    1. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    2. 3108 root 20 0 226012 4232 3348 R 1.9 0.2 0:00.07 top

    VIRT:进程使用的虚拟内存总量,单位为KB

    RES:进程使用的、未被换出的物理内存大小,单位KB

    SHR:共享内存大小,单位KB

    S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停 止,Z表示僵死进程

    %CPU:上次更新到现在的CPU时间占用百分比

    %MEM:进程占用的物理内存百分比

    TIME+:进程总计使用的CPU时间,单位为1/100秒

    COMMAND:正在运行进程的命令名或者命令路径

    3)交互式命令(重要)

    在top执行过程中可以使用的按键命令:

    h或?        显示帮助信息,给出交互式命令的一些说明

    k              终止一个进程

    i               忽略闲置进程和僵死进程(开关式命令)

    s              改变top输出信息两次刷新的时间,单位为秒

    o或O        改变top输出信息中显示项的顺序,按小写的a-z键可以将相应的列向右移动,而按大写的 A-Z键可以将相应的列向左移动。最后按enter确定

    m               切换显示内存信息

    t                 切换显示进程和CPU状态信息

    r                 重新设置一个进程的优先级(输入正值将使优先级降低,默认值10)

    l                 切换平均负载和启动时间信息

    q                退出top显示

    c                切换显示完整命令行和命令名称信息

    M               根据驻留内存大小进行排序输出

    N                以PID来排序

    P                根据CPU使用百分比大小进行排序输出

    T                根据时间/累计时间进行排序输出

    S                切换到累计模式

    W               将当前top设置写入~/.toprc文件中

    三、信号控制进程

    1. # 列出所有支持的信号
    2. [root@localhost ~]# kill -l

    常用的信号

    编号 信号名

    1    SIGHUP 重新加载配置

    2    SIGINT 键盘中断^C

    3    SIGQUIT 键盘退出

    9    SIGKILL 强制终止

    15  SIGTERM 终止(正常结束),缺省信号

    18  SIGCONT 继续

    19  SIGSTOP 停止

    20  SIGTSTP 暂停^Z(放在后台)

    给进程发送信号

    1. [root@localhost ~]# ps -ef |grep python
    2. root 1070 1 0 09:07 ? 00:00:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
    3. root 2996 1 0 09:08 ? 00:00:02 /usr/bin/python3 /usr/libexec/rhsm-service
    4. root 3931 3884 0 10:39 pts/4 00:00:00 python test.py
    5. root 3933 3466 0 10:40 pts/1 00:00:00 grep --color=auto python
    6. [root@localhost ~]#
    7. [root@localhost ~]# kill -20 3931 # 暂停3931这个进程
    8. [root@localhost ~]# kill -18 3931 # 恢复3931这个进程
    9. [root@localhost ~]# kill -19 3931 # 停止3931这个进程
    10. # 关掉所有有关python的进程
    11. [root@localhost ~]# killall python

    四、作业控制

            一个命令行功能,允许一个shell实例来运行和管理多个命令。如果没有作业控制,父进程 fork()一个子进程后,将sleeping,直到子进程退出。使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell 可以在子进程运行期间返回接受其他命令。

    foreground: 前台进程是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输 入和信号,并允许从终端读取或写入到终端。

    background: 后台进程没有控制终端,它不需要与终端交互。

    1. # 运行程序时,让其在后台执行,返回一个作业id号
    2. # &表示在后台工作
    3. [root@localhost ~]# sleep 3000 &
    4. [1] 7652
    5. # 快捷键CTRL+Z可以将前台的任务放在后台中暂停
    6. [root@localhost ~]# sleep 4000
    7. ^Z
    8. [2]+ Stopped sleep 4000
    9. # 查看有关sleep的进程信息
    10. [root@localhost ~]# ps aux | grep sleep
    11. root 7652 0.0 0.0 220952 1024 pts/0 S 18:25 0:00 sleep 3000
    12. root 7655 0.0 0.0 220952 1020 pts/0 T 18:25 0:00 sleep 4000
    13. root 7657 0.0 0.1 221664 2244 pts/0 S+ 18:26 0:00 grep --color=auto sleep
    14. # 查看当前终端放在后台的进程(jobs)
    15. # +表示最近被放到后台的工作,-表示最近第二个被放到后台中的工作,超过第三个就不会有+/-符号存在了
    16. [root@localhost ~]# jobs
    17. [1]- Running sleep 3000 &
    18. [2]+ Stopped sleep 4000
    19. # 让作业2在后台继续运行
    20. [root@localhost ~]# bg %2
    21. [2]+ sleep 4000 &
    22. # 将作业1调回到前台
    23. [root@localhost ~]# fg %1
    24. sleep 3000
    25. # kill 1,终止作业工作号为1的进程
    26. [root@localhost ~]# kill %1
    27. [root@localhost ~]# jobs
    28. [2]+ Running sleep 4000 &

  • 相关阅读:
    Android基础第八天 | 字节跳动第四届青训营笔记
    110. SAP UI5 FileUploader 控件深入介绍 - 为什么需要一个隐藏的 iframe
    技术与安全的交织
    python 采用selenium+cookies 获取登录后的网页
    Linux大文件分割小文件
    Linux学习笔记9
    2022-03-02-Maven
    【Linux】第十一章 进程信号(概念+产生信号+阻塞信号+捕捉信号)
    java毕业设计校园商铺mybatis+源码+调试部署+系统+数据库+lw
    【软件测试】测试人填坑?测试工作中的坑成长经历,填着填着就成了神......
  • 原文地址:https://blog.csdn.net/weixin_68256171/article/details/133591454