doy 19 进程管理
阅读原文时间:2023年07月10日阅读:3

1、进程管理

1、什么是进程,什么是线程

1、什么是程序

    一般情况下,代码,安装包等全部都是应用程序。  

2、什么是进程  

    应用程序运行起来的能够提供某种服务的实例。  

3、什么是线程  

    进程中处理具体事务的东西。  

    一个进程中,至少有一个线程,可以有多个线程(多线程)

2、进程的三种状态

就绪态  
阻塞态  
运行态  


3、查看进程(ps)

ps 是获取当系统进程的命令

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

-aux 一般情况下是一起使用,相同的参数组合还有一个 -ef 参数  

-ef 和 -aux之间的区别?  

    -ef  :  会打印出父级PID  
    -aux :  会打印出CPU、内存相关的使用情况  

\[root@localhost opt\]# ps -a -u -x  
\[root@localhost opt\]# ps -aux  
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
root          1  0.0  0.4  43696  4044 ?        Ss   Oct12   0:02 /usr/lib/systemd/  


USER : 指的是运行当前进程的用户
PID : 进程的编号
%CPU : CPU的占用率(指在单位时间之内占用CPU的时间比)
%MEM : 内存的占用率
VSZ : 应用程序向系统申请的内存(虚拟内存)
RSS : 应用程序实际上使用的内存大小
TTY : 应用程序正在使用的终端(?代表后台运行,也就是说不占用任何终端)
tty终端 : 操作系统的终端
pts终端 :虚拟终端

STAT : 进程的状态

        R :正在运行状态(正在使用CPU)  
        S :睡眠状态  
        D   不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒=》执行的IO操作得不到硬件设备的响应  
        T   停止的进程   
        Z   僵尸进程  
        X   死掉的进程(几乎看不见,因为死了就立即回收了)  
        < &nbsp; 标注了<小于号代表优先级较高的进程  
        N &nbsp; N代表优先级较低的进程  
        s &nbsp; 包含子进程  
        + &nbsp; +表示在前台运行的进程(前台运行就是指在命令行中运行)  
        l &nbsp; 小写字母l,代表以线程的方式运行,即多线程  
        | &nbsp; 管道符号代表多进程  


知识储备:

        nice 设置进程的优先级  

            -n : 设置具体的进程优先级  

            -20 ~ 20    : 数字越大优先级越小  
START   : 进程开始的时间  
TIME    : 进程占用CPU的总时间  
COMMAND : 进程运行的命令  

4、ps详解+

USER:   运行进程的用户
PID:   进程ID
%CPU:   CPU占用率
%MEM:   内存占用率
VSZ:   占用虚拟内存,单位:kb(killobytes)
VSZ是指已分配的线性空间大小,这个大小通常并不等于程序实际用到的内存大小,产生这个的可能性很多
比如内存映射,共享的动态库,或者向系统申请了更多的堆,都会扩展线性空间大小。

RSS: &nbsp;  占用实际内存,单位:kb(killobytes)  
        RSZ是Resident Set Size,常驻内存大小,即进程实际占用的物理内存大小  
TTY: &nbsp; 进程运行的终端  
STAT:  进程状态 &nbsp; &nbsp; man ps (/STATE) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  
    R &nbsp; &nbsp; 运行  
    S &nbsp; &nbsp; 可中断睡眠 Sleep,即在睡眠的过程中可以接收信号唤醒=》执行的IO操作可以得到硬件设备的响应  
    D &nbsp; &nbsp; 不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒=》执行的IO操作得不到硬件设备的响应  
    T &nbsp; &nbsp; 停止的进程   
    Z &nbsp; &nbsp; 僵尸进程  
    X &nbsp; &nbsp; 死掉的进程(几乎看不见,因为死了就立即回收了)  
    < &nbsp; &nbsp; 标注了<小于号代表优先级较高的进程  
    N &nbsp; &nbsp; N代表优先级较低的进程  
    s &nbsp; &nbsp; 包含子进程  
    + &nbsp; &nbsp; +表示是前台的进程组  
    l &nbsp; &nbsp; 小写字母l,代表以线程的方式运行,即多线程  
    | &nbsp; &nbsp; 管道符号代表多进程  

START: &nbsp;  进程的启动时间  
TIME: &nbsp;  进程占用CPU的总时间  

COMMAND: 进程文件,进程名  
          带\[\]号的代表内核态进程  
          不带\[\]号的代表用户态进程  

5、top命令

实时查看进程的命令。

1、基本参数

    默认情况下,top命令是3秒刷新一次  

    -d  指定刷新的频率  
    -p  查看指定进程的信息  
    -u  查看指定用户的进程  
    -n  查看指定top次数的信息  

    \[root@localhost ~\]# top  
    \[root@localhost ~\]# top -d 1  # 1秒刷新一次  
    \[root@localhost ~\]# top -d 1 -p 进程的pid  
    \[root@localhost ~\]# top -d 1 -p \`pgrep nginx | head -1\`  
    \[root@localhost ~\]# top -d 1 -p \`pgrep sshd | head -1\`,33  # 查看sshd以及pid为33的进程  
    \[root@localhost ~\]# top -d 1 -u nginx  # 查看指定用户进程  
    \[root@localhost ~\]# top -b -n 2 > top.txt  # 将2次top信息写入到文件  

2、系统整体统计信息  

    top - 11:35:39 up 1 day, 25 min,  3 users,  load average: 0.00, 0.01, 0.05  
    Tasks:  91 total, &nbsp; 1 running,  90 sleeping, &nbsp; 0 stopped, &nbsp; 0 zombie  
    %Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st  
    KiB Mem : &nbsp; 995676 total, &nbsp; 796276 free, &nbsp; 109180 used, &nbsp;  90220 buff/cache  
    KiB Swap:  1572860 total,  1572860 free, &nbsp; &nbsp; &nbsp;  0 used. &nbsp; 763052 avail Mem  PID USER &nbsp; &nbsp;  PR  NI &nbsp;  VIRT &nbsp;  RES &nbsp;  SHR S %CPU %MEM &nbsp; &nbsp; TIME+ COMMAND &nbsp;   


up : 启动
down :停止

    load average    : 系统负载  

    up左边的代表当前的时间  
    up右边代表运行了多长时间  
    load average: 0.86, 0.56, 0.78 &nbsp;  CPU 1分钟,5分钟,15分钟平均负载  
    us 用户态进程占用cpu时间的百分比  
    sys 内核态进程占用cpu时间的百分比  
    ni 代表优先被调度的进程占cpu时间的百分比  
    id cpu空闲的百分比  
    wa cpu等待io的百分比  
    hi 硬件中断,处理硬件中断所占用CPU的时间  
    si 软件中断,处理软件中断所占用CPU的时间  
    st 被偷走的cpu  

3、进程信息  

    VIRT:virtual memory usage 虚拟内存  
        1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等  
        2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量  


RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out(当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN)
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来,因为内存充裕了,大家就没必要合租内存了

DATA
1、数据占用的内存。如果top没有显示,按f键、然后用空格选中DATA项目、然后按q则可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

4、top 运行中可以通过 top 的内部命令对进程的显示方式进行控制

    M &nbsp; 按内存的使用排序  
    P &nbsp; 按CPU使用排序  
    N &nbsp; 以PID的大小排序  
    R &nbsp; 对排序进行反转  
    f &nbsp; 自定义显示字段  
    1 &nbsp; 显示所有CPU的负载  
    s &nbsp; 改变画面更新频率  
    1 &nbsp; 展开CPU详情  
    m &nbsp; 改变内存的显示样式  

    h|?帮助  
    < &nbsp;  向前  
    > &nbsp; 向后  
    z &nbsp; 彩色  

5、进程信号  

    1、什么是信号  

        简而言之,操作系统告诉进程怎么做,做什么的一种沟通方式。  

    2、kill 命令  

        kill就是发送信号的命令  

        \[root@localhost ~\]# kill -l  
         1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP  
         6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1  
        11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM  
        16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP  
        21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ  
        26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR  
        31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  
        38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8  
        43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13  
        48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12  
        53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  
        58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2  
        63) SIGRTMAX-1  64) SIGRTMAX      

    3、HUP信号  

        id &nbsp; : &nbsp; 1  

        完整的名字:SIGHUP  

        作用:  
            1、更新进程的配置

4、INT、QUIT和TSTP 终止信号

        INT 信号就是ctrl + c &nbsp; 停止进程  
        QUIT 信号就是ctrl + z  终止进程  
        TSTP 信号就是ctrl + \\  终断信号  

    5、KILL和TERM     杀死信号  

        KILL &nbsp;  :  杀死信号(直接回收内存,强制剥离CPU)  
        TERM &nbsp;  : 终止信号(优雅的死)  


6、CONT和STOP   暂停和恢复

        CONT  恢复  
        STOP  暂停  


知识储备:

        $$ &nbsp; : 打印当前进程的PID  

    kill -9 pid  
    kill -s SIGKILL  pid  

6、查看网络状态  

    \[root@tianyun ~\]# netstat -tnlp  # 查看正在监听的,且使用tcp协议的进程  
        -t &nbsp; tcp协议  
        -u &nbsp; udp协议  
        -l &nbsp; listen  
        -p &nbsp; PID/Program name  
        -n &nbsp; 不反解,不将IP地址解析为主机名,不将端口号解析成协议名(80 ---> http)  

7、僵尸进程和孤儿进程

​ ​ ​ ​ ​