zoukankan      html  css  js  c++  java
  • day25 进程管理

    进程管理

    进程介绍

    进程/程序的关系

    1.开发写好的代码,没有运行的时候,只是静态文件,我们称之为程序,程序是数据和指令的集合。
    2.当我们把开发好的代码程序运行起来的时候,我们称之为进程。
    3.当程序运行的时候系统会为进程分配Pid,运行用户,分配内存等资源。
    

    进程的生命周期

    1.当程序运行的时候会由父进程通过fock创建子进程来处理任务。
    2.子进程被创建后开始处理任务,当任务处理完毕后就会退出,然后子进程会通知父进程来回收资源。
    3.如果子进程处理任务期间,父进程意外终止了,那么这个子进程就变成了僵尸进程。
    

    如何查看当前终端的进程号和父进程号

    查看当前进程号:echo $BASHPID
    查看父进程号:echo $PPID
    

    进程监控命令

    在程序运行后,我们如何了解进程的各种状态呢,这就需要使用各种查看进程状态的命令来查看了

    ps查看当前的进程状态-最常用

    命令作用:

    PS process state 进程状态
    打印出进程当前运行的状态快照,并不是实时的监控,而是某一时刻进程快照
    

    常用参数:

    #unix风格
    a  #显示包含所有终端中的进程
    u  #此选项使ps列出您拥有的所有进程(与ps相同的EUID),或与a选项一起使用时列出所有进程。
    x  #显示进程所有者的信息
    f  #显示进程树
    o  #属性,显示定制的信息
    k  #属性,对属性进行排序,属性前加-表示倒叙
    --sort 
    
    #使用标准语法查看系统上的每个进程
    -e  #显示所有进程
    -f  #显示完整格式程序信息
    -p  #显示pid的进程
    -C  #指定命令
    -q  #指定id
    -t  #指定终端机编号,并列出属于该终端机的程序状况
    

    运行结果:

    [root@centos7-100 ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.6 128160  6816 ?        Ss   9月29   1:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    root          2  0.0  0.0      0     0 ?        S    9月29   0:00 [kthreadd]
    root          4  0.0  0.0      0     0 ?        S<   9月29   0:00 [kworker/0:0H]
    root          6  0.0  0.0      0     0 ?        S    9月29   0:04 [ksoftirqd/0]
    root          7  0.0  0.0      0     0 ?        S    9月29   0:00 [migration/0]
    root          8  0.0  0.0      0     0 ?        S    9月29   0:00 [rcu_bh]
    root          9  0.0  0.0      0     0 ?        R    9月29   0:17 [rcu_sched]
    root         10  0.0  0.0      0     0 ?        S<   9月29   0:00 [lru-add-drain]
    root         11  0.0  0.0      0     0 ?        S    9月29   0:02 [watchdog/0]
    
    
    [root@centos7-100 ~]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 9月29 ?       00:01:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    root          2      0  0 9月29 ?       00:00:00 [kthreadd]
    root          4      2  0 9月29 ?       00:00:00 [kworker/0:0H]
    root          6      2  0 9月29 ?       00:00:04 [ksoftirqd/0]
    root          7      2  0 9月29 ?       00:00:00 [migration/0]
    root          8      2  0 9月29 ?       00:00:00 [rcu_bh]
    root          9      2  0 9月29 ?       00:00:17 [rcu_sched]
    root         10      2  0 9月29 ?       00:00:00 [lru-add-drain]
    root         11      2  0 9月29 ?       00:00:02 [watchdog/0]
    root         13      2  0 9月29 ?       00:00:00 [kdevtmpfs]
    root         14      2  0 9月29 ?       00:00:00 [netns]
    root         15      2  0 9月29 ?       00:00:00 [khungtaskd]
    root         16      2  0 9月29 ?       00:00:00 [writeback]
    root         17      2  0 9月29 ?       00:00:00 [kintegrityd]
    root         18      2  0 9月29 ?       00:00:00 [bioset]
    
    

    状态解释:

    USER       #启动进程的用户
    PID        #进程id号
    %CPU       #进程占用的cpu百分比
    %MEM       #进程占用内存百分比
    VSZ 		#进程申请占用的虚拟内存大小,单位kb
    RSS         #进程实际占用的物理内存实际大小,单位kb
    TTY         #进程运行的终端,?表示为内核程序,与终端无关
    STAT        #进程运行中某个状态,可以man ps关键词/state查询详细帮助手册
    START       #进程启动时间
    TIME        #进程占用cpu时间
    COMMAND     #程序运行的指令[]表示属于内核态的进程。没有[]表示用户进程
    
    ####进程状态
    D:不可中断睡眠
    R:正在运行
    S:可中断睡眠
    T:进程被暂停
    Z:僵尸进程
    
    ####进程字符
    <:高优先级进程  S<表示优先级较高的进程
    N:低优先级进程 SN表示优先级较低的进程
    s:子进程发起者 Ss表示父进程
    l:多线程进程   Sl表示进程以多线程运行
    +:前台进程     R+表示该进程在前台运行,一旦终止,数据丢失
    

    案例演示:

    1.查看进程的父子关系
    ps auxf
    
    2.查看进程的特定属性
    ps axo pid,cmd,%cpu,%mem
    
    3.按cpu利用率排序
    ps axo pid,cmd,%cpu,%mem k -%cpu
    
    4.按内存使用倒叙排序
    ps axo pid,cmd,%cpu,%mem --sort %mem
    
    5.列出指定用户名和用户id的进程
    ps -fu oldboy
    ps -fu 1000
    
    6.查看指定进程id对应的子进程
    ps -fp pid
    
    7.查找指定父进程id下的所有子进程
    ps -f --ppid pid
    
    8.按照tty显示所属进程
    ps -ft pts/1
    
    9.根据进程名查找所属oid
    ps -C sshd -o pid=
    
    10.根据pid查找运行的命令
    ps -p PID -o comm=
    [root@centos7-100 ~]# ps -p 1 -o comm=
    systemd
    
    
    

    pstree 查看进程层级关系

    yum provides pstree

    yum install psmisc -y

    pstree列出父进程与子进程的关系

    不加参数

    pstree

    显示进程pid

    pstree -p

    根据进程所属用户查找

    pstree -p oldboy

    根据进程pid 查找

    1.先使用find查找nginx.pid文件
    [root@centos7-100 ~]# find / -type f -name "nginx.pid"
    /opt/nginx-1.19.9/logs/nginx.pid
    
    2.使用字符拼接找到父进程与子进程关系
    [root@centos7-100 ~]# pstree -p $(cat /opt/nginx-1.19.9/logs/nginx.pid)
    nginx(40926)───nginx(40927)
    

    pidof 查看指定名称进程的进程号

    命令作用:

    显示指定程序的pid
    

    举例:

    pidof nginx

    [root@centos7-100 ~]# pidof nginx
    40927 40926
    [root@centos7-100 ~]# pidof sshd
    44313 44306 30666 1010
    
    

    top查看当前的进程状态

    命令作用:

    展示进程动态的实时数据
    

    常用参数:

    -d     #指定刷新时间,默认3秒
    -n     #刷新多少次后退出
    -p     #指定pid
    

    内置命令:

    #帮助
    h/?   #查看帮助
    q/esc  #退出帮助
     
    #排序
    P      #按CPU使用百分比排序输出
    M      #按内存使用百分比排序输出
    
    #显示
    1 
    

    htop

    lsof查看进程

  • 相关阅读:
    深入理解vue路由的使用
    mac异常删除管理员账户恢复操作
    springMVC前后端分离开发模式下支持跨域请求
    npm 更新镜像安装Appium
    npm升级所有可更新包
    new AppiumDriver<>(new URL(url), capabilities) 报错 java.lang.NoSuchMethodError: com.google.common.base.Throwables.throwIfUnchecked(Ljava/lang/Throwable;)V
    Jmeter命令行运行实例讲解
    shodan会员命令版
    AS-REPRoasting
    Password Spraying/密码喷洒
  • 原文地址:https://www.cnblogs.com/zhaocheng690/p/15490226.html
Copyright © 2011-2022 走看看