• 🍖Linux进程管理


    一.进程介绍

    1.进程

    • 程序: 存放代码的文件(静态概念)
    • 进程: 程序运行的过程(动态概念)
    • 同一个程序可能对应多个进程
    • 父进程: 程序运行时产生的第一个进程
    • 子进程: 由父进程衍生出来的进程(比如在bash里再开一个bash)
    • 如果父进程终止,子进程也会随之终止
    • 进程是操作系统最核心的概念

    2.并行与并发

    • 并发: 多个任务看起来是同时运行的
    • 并行: 多个任务真正的同时运行(只有多核再能实现并行)

    3.线程

    • 线程是进程内代码执行的过程
    • 线程才是CPU上的执行单位
    • 一个进程至少有一个线程
    • 强调:CPU只做代码的运行,而不涉及I/O操作

    4.任务三种状态

    • 运行态
    • 就绪态
    • 阻塞态
    • 不是阻塞态就是非阻塞态

    5.提交任务的两种方式

    • 同步
     同步是指发送方发送数据后, 等接收方发回响应后才发下一个数据报的通讯方式
    
    • 异步
    异步是指发送方发出数据后, 不等接收方发回响应, 接着就发下个数据包的通讯方式
    
    • 例子
    1.快递小哥给你送快递,如果他打电话叫你过来拿,他在那里等你,等你从他手上把快递拿走了他才去送别人的快递,这个就称之为同步
    2.快递小哥把你快递放在丰巢柜或者驿站,然后打个打电话或者发个信息告诉你快递到了让你自己去拿,然后小哥去干别的事了,这个就是异步(效率更高一点)
    

    二.进程信息的查看

    1.ps aux 组合命令,查看进程信息

    -a 显示一个终端的所有进程
    -u 选择有效的用户ID或者是用户名
    -x 显示没有控制终端的进程,同时显示各个命令的具体路径

    2.命令显示结果

    3.首行信息代表含义

    USER 运行进程的用户
    PID 进程运行的ID号
    %CPU 进程占用CPU百分比
    %MEM 进程占用内存百分比
    VSZ 进程占用虚拟内存的大小(单位: KB)
    RSS 进程占用物理内存的实际大小(单位: KB)
    TTY 进程运行的终端(tty1, pts/0虚拟终端等)
    STAT 进程运行过程中的状态(R S D T Z X < N s + l |) "man"查询
    START 进程启动时间
    TIME 进程占用CPU的总时间("0"表示还没有超过"1"秒)
    COMMAND 程序运行指令,有[ ]代表内核态进程,没有[ ]代表用户态进程
    • VSZ : 是指已分配的线性空间大小, 这个大小通常并不等于程序实际用到的内存大小,(内存映射, 共享的动态库, 或向系统申请了更多的堆都会扩大线性空间)

    • RSS : 常驻内存大小, 即进程实际占用的物理内存大小

    • STAT进程状态

    R 进程运行
    S 可中断睡眠(sleep),执行I/O操作可得到硬件设备响应
    D 不可中断睡眠, 执行I/O操作得不到硬件设备的响应
    T 停止的进程
    Z 僵尸进程
    s 大S后面的小s,代表包含子进程
    < 优先级较高的进程
    N 优先级较低的进程
    + 前台运行的进程
    |(管道符号) 代表多进程
    X 死掉的进程(几乎看不见,死掉后就被回收了)
    l(小写l) 以多线程的方式运行
    • D状态与Z状态的进程都无法使用 kill -9 杀死

    4.ps -elf 查看命令

    • 选项
    -e 显示所有进程
    -f 全格式
    -l 长格式
    • 三种查看效果对比(PPID代表当前进程的父进程)

    5.查看进程不同状态

    • S+状态与T状态切换
    打开一个文件进行编辑
    [root@shawn ~]# vim aaa.txt
    ps 查看
    [root@shawn ~]# ps aux | grep [v]im
    root      94654  0.0  0.5 149816  5408 pts/0    S+   17:04   0:00 vim aaa.txt
    Ctrl + z 暂停挂到后台再查看
    [root@shawn ~]# ps aux | grep [v]im
    root      94654  0.0  0.5 149816  5408 pts/0    T    17:04   0:00 vim aaa.txt
    
    • 查看 S+ R+ D+ 状态
    我们将这些目录打包压缩成一个压缩包,内容比较大
    [root@shawn ~]# tar cfz /aaa.gz /home /opt /boot /run
    然后不断地使用"ps"命令去查看"tar"的运行状态
    [root@shawn ~]# ps aux | grep [t]ar
    root      96003  5.0  0.1 123808  1408 pts/0    S+   17:30   0:00 tar cfz /aaa.gz /home /opt /boot /run
    [root@shawn ~]# ps aux | grep [t]ar
    root      96003  6.8  0.1 123808  1408 pts/0    R+   17:30   0:00 tar cfz /aaa.gz /home /opt /boot /run
    [root@shawn ~]# ps aux | grep [t]ar
    root      96003  5.5  0.1 123808  1408 pts/0    D+   17:30   0:01 tar cfz /aaa.gz /home /opt /boot /run
    捕捉到了三种状态
    

    6.查看进程树

    先安装"pstree"应用
    [root@shawn ~]# yum -y install psmisc
    [root@shawn ~]# rpm -qf `which pstree`
    psmisc-22.20-16.el7.x86_64
    查看
    [root@shawn ~]# pstree
    systemd─┬─VGAuthService
            ├─abrt-watch-log
            ├─abrtd
            ├─auditd───{auditd}
            ├─crond
            ├─dbus-daemon
            ├─login───bash
            ├─master─┬─pickup
            │        └─qmgr
            ├─polkitd───6*[{polkitd}]
            ├─rsyslogd───2*[{rsyslogd}]
            ├─sshd─┬─sshd───bash
            │      └─sshd───bash───pstree
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-udevd
            ├─tuned───4*[{tuned}]
            └─vmtoolsd───{vmtoolsd}
    [root@shawn ~]# pstree 95327    (查看某一个进程)
    bash───pstree
    

    7.动态查看用法top

    • 常用选项

    -d 指定刷新时间(秒)
    -p 指定某个进程(PID)
    -u 查看指定用户的进程
    • 选项示例

    ⛅查看指定进程ID的进程信息

    top -d 1 -p 11019 1秒刷新一次

    ⛅查看指定用户开启的所有进程信息

    top -d 1 -u song1 1秒刷新一次

    • 动态信息含义

    ⛅首行(可按小写L选择开启或关闭)

    top 当前时间
    up 系统已运行时间
    users 登入的用户数量
    load average 平均负载(1分钟,5分钟,15分钟)

    ⛅第二行

    Tasks: 111 total 表示有111个进程
    running 正在运行的进程数
    sleeping 正在睡眠的进程数
    stopped 停止的进程数
    zombie 僵尸进程数

    ⛅第三行

    %CPU(s):(按"1"可以展开) 表示各种占用CPU的百分比
    us 用户态占用CPU百分比
    sy 内核态占用CPU百分比
    ni nice值
    id 空闲CPU百分比
    wa cpu等待I/O完成时间
    hi 硬件中断占CPU百分比
    si 软件中断占CPU百分比
    st 被虚拟化偷走的CPU时间

    ⛅第四行

    KIB Mem : 物理内存
    total 物理内存总空间
    free 空闲空间
    used 已用空间
    buff / cache 缓冲 / 缓存占用空间

    ⛅第五行

    KIB Swap : 交换分区大小
    total 交换分区总空间
    free 空闲空间
    used 已用空间
    avail Mem 可用内存

    ⛅信息字段含义补充

    PR 优先级(比 NI 大 20)
    NI nice值,也表示优先级
    VIRT 虚拟内存(线性空间)
    RES 进程当前使用的内存大小
    SHR 共享内存
    • 进程信号

    kill -l 列出当前系统支持的信号

    ⛅常用信号

    编号 含义 作用
    1 SIGHUP 不用重启进程直接重新加载配置文件
    9 SIGKILL 强制杀死进程(D,Z杀不死)
    15 SIGTERM 终止进程, kill默认就是这个信号
    18 SIGCONT 让被停止的进程恢复运行
    19 SIGSTOP 暂停进程

    ⛅信号使用示例(使用信号18,19)

    我们开启一个"ping"进程
    # ping 192.168.12.1
    

    使用"ps"命令查看"ping"进程
    # ps aux | grep [p]ing
    

    停止进程挂职后台
    # kill -19 25002
    	或者 Ctrl + z
    再次查看状态
    # ps aux | grep [p]ing
    

    使用"18"信号将其继续运行
    # kill -18 25002
    # ps aux | grep [p]ing
    

    ⛅信号使用示例2(使用信号1)

    使用信号"1",再不重启进程(进程号不变)的情况下重新载入配置
    # vim /etc/vsftpd/vsftpd.conf    (编辑ftp配置文件)
    # ps aux | grep [v]sftpd         (查看ftp进程信息)
    root 11019  0.0  0.0  53288   772 ?  Ss   17:21  0:00 /usr/sbin/vsftpd/etc/vsftpd/vsftpd.conf
    
    # kill -1 11019                  (重载ftp配置文件)
    

    ⛅根据进程名杀死所有进程

    # killall -9 vim   (杀死所有的"vim"进程)
    # pkill -9 vim     (杀死所有的"vim"进程)
    

    ⛅查看某个用户开启的进程

    # pgrep -l -u song1
    

    • TOP常用内部命令

    s(默认3秒) 修改刷新时间,建议不要设置很小,会消耗CPU资源
    q 退出,或者是 Ctrl + c
    M 按照内存占用率大小从大到小排序
    P 按照CPU占用率从大到小排序
    N 按照PID从大到小排序
    (R) 以上配合R可进行倒序
    (shift + > <) 以上配合左右可进行左右字段选择
    f 增加显示的字段,空格键选择
    k 发送信号
    数字 "1" 展开显示所有的CPU信息
    z 变颜色
    "⬆"," ⬇" 向上向下进行翻页查看
    r 调整进程优先级
  • 相关阅读:
    C++中关于文本内容的实用操作集合(新)(添加一些关于文件流的介绍)
    C++_String_类字符串操作(转)
    C++下面关于字符串数组的一些操作
    windows下 berkerly db的安装配置(修正了关键步骤)
    代码审计基础知识
    Spring中的依赖查找和依赖注入
    JavaSE实现IoC
    LeetCode 87. Scramble String
    LeetCode 76. Minimum Window Substring
    LeetCode 169. Majority Element
  • 原文地址:https://www.cnblogs.com/songhaixing/p/13929240.html
Copyright © 2020-2023  润新知