zoukankan      html  css  js  c++  java
  • linux系统管理-进程管理

    linux系统管理-进程管理

    程序和进程的区别

    1.程序是数据和指令的集合,是一个静态的概念,比如/bin/ls、/bin/cp等二进制文件,同时程序可以长期存在系统中。

    2.进程是一个程序的运行过程,是一个动态概念,进程是存在生命周期概念的,也就是说进程会随着程序的终止而销毁,不会永远在系统中存在。

    进程的生命周期

    img

    程序运行是进程的状态关系

    1.当父进程接收到任务调度时,会通过fork派生子进程来处理,那么子进程会集成父进程的衣钵。
    2.子进程在处理任务代码时,父进程会进入等待的状态...
    3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成了僵尸进程。
    4.每个进程都会有自己的PID号,(process id)子进程则PPID

    进程状态管理命令(静态)

    使用ps命令查看当前的进程状态(静态查看)

    常用组合:ps aux 查看进程

    [root@zls ~]# ps aux
    a:显示所有与终端相关的进程,由终端发起的
    u:显示用户导向的用户列表
    x:显示所有与终端无关的进程
    

    在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程。
    在进程运行时,它对 CPU 时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。

    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    USER:       //启动程序的用户
    PID:        //进程ID
    %CPU:       //占用CPU的百分比
    %MEM:       //占用内存的百分比
    VSZ:        //虚拟内存集(进程占用虚拟内存的空间)
    RSS:        //物理内存集(进程占用物理内存的空间)
    
    TTY:        //运行的终端
            ?:      #内核运行的终端
            tty1:   #机器运行的终端
            pts/0:  #远程连接的终端
    
    STAT:       //进程状态
            D:      #无法中断的休眠状态(通IO的进程)
            R:      #正在运行的状态
            S:      #处于休眠的状态
            T:      #暂停或被追踪的状态
            W:      #进入内存交换(从内核2.6开始无效)
            X:      #死掉的进程(少见)
            Z:      #僵尸进程
            <:      #优先级高的进程
            N:      #优先级较低的进程
            L:      #有些页被锁进内存
            s:      #父进程(在它之下有子进程开启着)
            +:      #该进程运行在前台
            
            l:      #以线程的方式运行
            |:      #多进程的
            
    START:      //进程被触发开启的时间
    TIME:       //该进程实际使用CPU的运行时间
    COMMAND:    //命令的名称和参数
            [] :     #内核态的进程
            没[]:    #用户态的进程
    

    进程的相关命令

    #对进程的CPU进行排序展示
    [root@zls ~]# ps aux --sort %cpu |less
    
    #对进程的占用物理内存排序
    [root@zls ~]# ps aux --sort rss |less
    
    #排序,是在记不住,那就自己排序
    [root@zls ~]# ps aux|sort -k3 -n
    
    #自定义显示字段
    [root@zls ~]# ps axo user,pid,ppid,%mem,command |grep sshd
    root        869      1  0.2 /usr/sbin/sshd -D
    root       1194    869  0.2 sshd: root@pts/0
    root       1307    869  0.2 sshd: root@pts/1
    root       1574    869  0.2 sshd: root@pts/2
    
    #显示进程的子进程
    [root@zls ~]# yum install nginx -y
    [root@zls ~]# systemctl start nginx
    [root@zls ~]# ps auxf|grep [n]ginx
    root       2033  0.0  0.1 125096  2112 ?        Ss   13:29   0:00 nginx: master process /usr/sbin/nginx
    nginx      2034  0.0  0.1 125484  3148 ?        S    13:29   0:00  \_ nginx: worker process
    
    #查看指定进程PID
    [root@zls ~]# ps aux|grep sshd
    root       1157  0.0  0.1 105996  3604 ?        Ss   Feb27   0:00 /usr/sbin/sshd -D
    [root@zls ~]# cat /run/sshd.pid
    1157
    
    #pgrep常用参数, -l -a
    [root@zls ~]# pgrep sshd
    869
    1194
    1307
    1574
    [root@zls ~]# pgrep -l sshd
    869 sshd
    1194 sshd
    1307 sshd
    1574 sshd
    [root@zls ~]# pgrep -l -a sshd
    869 /usr/sbin/sshd -D
    1194 sshd: root@pts/0
    1307 sshd: root@pts/1
    1574 sshd: root@pts/2
    
    #查看进程的pid
    [root@zls ~]# pidof sshd
    1574 1307 1194 869
    
    #查看进程树 
    [root@zls ~]# pstree
    

    动态进程监控(top)

    top前两行内容解析

    第一行内容:
            当前系统时间		服务器运行时间	        有3个用户在登录		
    top - 	10:54:23 			up 1 day, 17:56,   3 users,  
    
    #平均负载(系统)     1分钟   5分钟      15分钟
    load average:                0.00,    0.01,       0.05
    
    第二行内容:
    总共122个任务		1个正在运行(R)	121个进入睡眠状态的(S)		没有停止(T)Tasks: 122 total,     1 running, 			121 sleeping,          0 stopped, 
    0个僵尸进程(Z)
    0 zombie
    

    第三行内容

    		  用户态   内核态   优先级	 空闲	   等待(wait)		硬中断   	软中断  %Cpu(s):  0.1 us,  0.1 sy,   0.0 ni, 99.8 id,  0.0 wa,       0.0 hi,    0.0 si,
    虚拟机占用物理机CPU的百分比
    0.0 st
    

    第四行:内存

    KiB Mem :  2028116 total,   150780 free,   144108 used,  1733228 buff/cache
    

    第五行:swap虚拟内存

    KiB Swap:  2097148 total,  2097148 free,        0 used.  1645080 avail Mem 
    

    第六行

     PID   USER    PR  NI    VIRT      RES       SHR    S      %CPU      %MEM     
    进程号  用户    优先级   虚拟内存 物理内存 共享内存  状态  占CPU百分比 占内存百分比
    TIME+    COMMAND 
    运行时间  进程的运行命令
    

    中断:硬中断

    中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的终端处理程序来影响设备的请求。

    软中断:

    事实上,为了解决中断处理程序执行过长的和丢失中断的问题,Linux将中断处理过程分成了两个阶段:
    第一阶段:用来快速处理(硬中断)中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关工作
    第二阶段:用来延迟处理第一阶段未完成的工作,通常以内核线程的方式运行。

    例如:

    第一阶段:当你接到第一个配送员电话时,你可以跟他说,你已经知道了,其他事见面再细说,然后就可以挂断电话了。

    第二阶段:才是取外卖,然后见面聊发票的处理动作。

    如此一来,第一个配送员不会在电话里占用你很长时间,第二个配送员来的时候,照样可以打通电话。

    top命令的使用

    [root@zls ~]# top
    #指定N秒变化时间
    [root@zls ~]# top -d 1
    #查看指定进程的动态信息
    [root@zls ~]# top -d 1 -p 10126
    [root@zls ~]# top -d 1 -p 10126,1
    #查看指定用户的进程
    [root@zls ~]# top -d 1 -u apache
    #将 2 次 top 信息写入到文件
    [root@zls ~]# top -d 1 -b -n 2 > top.txt
    
    top 常见指令
    h   查看帮出
    z   高亮显示
    1   显示所有CPU的负载
    s   设置刷新时间
    b   高亮现实处于R状态的进程
    M   按内存使用百分比排序输出
    P   按CPU使用百分比排序输出
    R   对排序进行反转
    f   自定义显示字段
    k   kill掉指定PID进程
    W   保存top环境设置 ~/.toprc
    q   退出
    

    信号管理进程(kill)

    当程序运行为进程后,如果希望强行停止就可以使用kill命令对进程发送关闭信号,除了kill还有pkill、killall

    定义守护进程的角色
    结束用户会话和进程

    [root@zls ~]# kill -l //列出所有支持的信号
    
    //常见信号列表:
    数字信号        信号别名        作用
    1       HUP     挂起信号,往往可以让进程重新配置
    2       INT     中断信号,起到结束进程的作用,和ctrl + c 的作用一样
    3       QUIT        让进程退出,结果是进程退出
    9       KILL        直接结束进程,不能被进程捕获
    15      TERM        进程终止,这是默认信号
    18      CONT        被暂停的进程将继续恢复运行
    19      STOP        暂停进程
    20      TSTP        用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停
    

    kill命令发送指令

    // 给 vsftpd 进程发送信号 1,15
    [root@zls ~]# yum -y install vsftpd
    [root@zls ~]# systemctl start vsftpd
    //发送重启信号,例如 vsftpd 的配置文件发生改变,希望重新加载
    [root@zls ~]# kill -1 9160
    //发送停止信号,vsftpd 服务有停止的脚本 systemctl stop vsftpd
    [root@zls ~]# kill 9160
    
    // 给vim进程发送信号 9,15
    [root@zls ~]# touch file1 file2 
    //使用远程终端1打开file1
    [root@zls ~]# tty
    /dev/pts/1
    [root@zls ~]# vim file1
    //使用远程终端2打开file2
    [root@zls ~]# tty 
    /dev/pts/2
    [root@zls ~]# vim file2
    //查看当前进程pid
    [root@zls ~]# ps aux |grep vim
    root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1 
    root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2
    //发送15信号
    [root@zls ~]# kill 4362
    //发送9信号
    [root@zls ~]# kill -9 4363
    //还可以同时给所有vim进程发送信号, 模糊匹配,同时给多个进程发送信号
    [root@zls ~]# killall vim
    
    //使用pkill踢出从远程登录到本机的用户, pkill  类似killall
    [root@zls ~]# w
     20:50:17 up 95 days,  9:30,  1 user,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    xuliangw pts/0    115.175.115.39   20:22    0.00s  0.01s  0.00s sshd: zls [priv]
    
    //终止 pts/0上所有进程, 除了bash本身
    [root@zls ~]# pkill -t pts/0
    //终止pts/0上所有进程, 并且bash也结束(用户被强制退出)
    [root@zls ~]# pkill -9 -t pts/0
    
    //列出zls用户的所有进程,-l输出pid
    [root@linux-zls ~]# pgrep -l -u zls
    32206 sshd
    32207 bash
    
  • 相关阅读:
    sqhhb
    12333
    12

    今日份
    12
    彻底理解 Cookie、Session、Token
    https原理
    12312
    uiower
  • 原文地址:https://www.cnblogs.com/1naonao/p/11226449.html
Copyright © 2011-2022 走看看