• linux 系统进程


    进程:是已经启动的可执行的运行实例

    组成

    • 已分配内存的地址空间
    • 安全属性,包括所有权凭据和特权
    • 程序代码的一个或多个执行线程

    进程状态

    • 程序:二进制文件
    • 进程:是程序运行时的过程,动态,有生命周期及运行状态
    父进程复制自己的地址空间创建一个新的进程结构,每个新进程分配一个唯一的进程IP(PID),满足跟踪安全性,
    
    PID和父进程(PPID)是子进程环境的元素,
    
    任何进程都可以创建子进程,每个进程都是第一个系统进程的后代
    • centos5,6的PID为1的进程是init
    • centos7的PID为1的进程为systemd

    僵尸进程

    比较容易理解的是:
        父进程退出了,子进程没有退出. 这些子进程没有父进程来管理,就变成了僵尸进程
    • 启动进程的用户ID(UID)和所属的组(GID)
    • 进程状态:运行R, 休眠S, 僵尸Z

    PS查看进程工具

    常用的参数

    a: 显示跟当前终端关联的所有进程
    u: 基于用户的格式显示
    x: 显示所有进程,不以终端机来区分

    user:启动这些进程的用户
    pid:进程的id
    %cpu:进程占用cpu百分比
    %men:进程占用内存的百分比
    vsz:进程占用的虚拟内存大小(单位kb)
    rss进程占用的物理内存大小(kb)
    stat:该进程目前的状态
      R:该程序目前正在运行,或者可被运行
      S:该程序目前正在睡眠
      T:该程序目前正在侦测或者停止了,
      Z:该程序应该已经终止,但是其父进程无法正常的终止他,造成zombie僵尸程序的状态
      D:不可中断状态
    五个基本状态后面还可以加一些字母
      <:表示进程运行在高优先级上
      N:表示进程运行在低优先级上
      L:表示进程有页面锁定在内存中
      s:表示进程是控制进程
      l:表示进程是多线程的
      +:表示当前进程运行在前台
    start:被触发启动的时间
    time:实际使用cpu运作的时间,有显示0:00的,耗费cpu资源不到1秒
    command:改程序的实际指令

    还可以通过ps -ef来查看进程

    -e: 显示所有进程
    -f: 显示完整格式输出

    UID:启动这些进程的用户
    PID:进程的ID
    PPID:父进程的ID号
    C:进程生命周期的利用率
    Stime:启动启动时的系统时间
    tty:进程在哪个终端上运行
      ?:表示与终端没有关系,大部分是内核的
      tty1
    -tty6是本机上面的登入者程序,若为pts/0等等的,则表示由网络连接进主机的程序(是虚拟的) time:运行进程累计需要的cpu时间 cmd:启动的程序名称

    uptime 查看系统负载

    20:25:36 :当前时间
    up 4 days: 系统运行时间,说明这台服务器已经开机4天了
    3 user: 当前登录的用户数
    load average: 0.00, 0.01, 0.05:  cpu系统负载,即cpu任务队列的平均长度,三个数值分别是1分钟,5分钟,15分钟的平均值

    互动

    互动:
    找出当前系统中,cpu负载过高的服务器
    服务器:load average 0.15, 0.08, 0.01         1核
    服务器:load average 4.15, 6.08, 6.01        1核
    服务器:load average 10.15, 10.08, 10.01    4核
    
    答案:4核
    经验:单核心,1分钟的系统平均负载不差过3,就可以,这是个经验值

    top命令

    第一行,系统负载
    第二行,进程信息
        tesks(当前任务数)
        running 运行
        sleeping 睡眠
        stopped 终止
        zombie 僵尸进程
    
    第三行cpu信息
        us:用户占用cpu的时间
        sy:内核占用cpu
        ni:用户进程空间内改变过优先级占用的cpu
        id:空闲cpu的百分比
        wa:当对磁盘进行大量写时,发现IO等待会占用很多cpu,如果正常使用占用比较多cpu,磁盘性能有问题
        hi:硬件中断占用的cpu,硬件驱动通常是内核中的一个子进程,而不是一个独立的进程
        si:软中断,占用的cpu百分比,往磁盘写入数据有个队列,所占用的时间
        st:虚拟机占用物理机cpu时间
    
    第四行内存信息
      单位kb
      total 总内存
      free 空闲
      used 占用
      buff/cache 这里的缓存是可以释放的
    
    第五行 swap
      total 交换区总量
      free 空闲的交换区总量
      used 使用的交换区总量
      avail Mem 总共的可利用内存是多少
      注意:如果swap分区,被使用,那么你的内存不够用了
    快捷键
    默认 3s 刷新一次,按s修改刷新时间
    按空格立即刷新
    
    按大写的 C 按照cpu占用排序
    按大写的 M 安装内存占用排序
    
    按数字键1,显示每个内核的cpu使用频率
    按u: 显示指定的用户
    h:帮助
    top -p 1  通过进程ID查看单个进程

    找出系统中占用系统进程最多的进程

    top 后按大写的P

    在linux系统中最多可以使用100%CPU吗

    理论上:如果你是4核心的cpu,你可以运行400%

    lsof命令

    -p 进程号,列出指定进程号打开的文件
    -i  条件:列出符合条件的进程

    查看某个进程读了那些文件,调用了那些东西呢,一般用于木马进程

    lsof -p 进程ID

    查看端口,或者看黑客开启的后门端口是哪个进程在使用

    lsof -i:22

    pstree工具

    • 以树形图显示进程,只显示进程的名字,且相同进程合并显示
    • pstree -p显示进程ID

    前台进程:
    是在终端中运行的命令,那么终端就是进程的控制终端
    一旦这个终端关闭,这个进程也随之消失
    
    后台进程,
    也叫守护进程,是运行在后台的一种特殊进程,不受终端控制,不需要终端的交互,
    linux的大多数的服务器就是用守护进程来实现的, 比如web服务器httpd等

    前台后台进程切换

    &用在一个命令的最后,可以把这个命令放到后台执行

     

     ctrl + z可以将一个正在前台执行的程序放到后台

    jobs查看当前有多少在后台运行的进程,这是一个作业控制命令

     

     fg命令将后台中的命令调到前台继续运行,

    如果后台中有多个命令可以用 fg %jobnumber将选中的命令调出,

    %jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) 

    bg命令将一个在后台中暂停的进程,变成继续执行,

    用法同上

    关闭进程

    kill [信号] [进程ID]
    kill -l        -->列出指定的信号

     

     常用的信号

    信号编号  信号名                      解释
    1        SIGHUP        重新加载配置
    2        SIGINT         键盘中断ctrl+c
    3        SIGQUIT        退出
    9        SIGKILL        强制退出
    15        SIGTERM        终止(正常结束),缺省信号
    18        SIGCONT        继续
    19        SIGSTOP        停止
    20        SIGTSTP        暂停 ctrl+z

    killall 和 pkill 命令通过指定名字来杀死进程

    killall sshd
    pkill sshd

    进程优先级管理

    优先级的取值范围(-20,19),越小优先级越高,默认优先级是0
    nice -n
    nice -n 5 vim a.txt
    ctrl+z挂起进程

    查看进程的PID
    查看PID:ps -axu | grep vim

     根据PID查看进程的信息

    可以发现NI优先值是5

    实战:使用screen后台实行执行命令备份命令
    场景:公司晚上需要备份1t数据,我再xshell上直接执行备份脚本back.sh可以吗?
    或直接运行back.sh&放到后台运行可以吗?
    当关了xshell,back.sh&还在后台执行吗?

    xshell长时间连接,如果本地网络偶尔断开或者xshell不小心关闭,都会让后台运行的备份命令停止运行的
    正确做法使用:screen
    安装yum install screen

     用法:

    执行screen,将打开一个全新的会话
    运行你的备份任务,或者vim a.txt命令
    这时可以键入快捷键ctrl+a+d  
    就已经分离出一个单独的会话

    screen -ls 查看已经建立的会话id
    screen -r 25448 通过PID 重新连接会话
    screen -S text 指定会话名称
    当不想使用screen会话了,exit退出

      

  • 相关阅读:
    go基础第六篇:依赖管理
    go基础第五篇:并发
    go基础第四篇:error、panic、recover
    go基础第三篇:结构体、函数、方法、接口
    docker第二篇:docker compose
    docker第一篇:docker概念及基础命令
    编辑距离
    常见安全漏洞
    go基础第二篇:类型
    go基础第一篇:基本语法
  • 原文地址:https://www.cnblogs.com/sunlizhao/p/9574303.html
Copyright © 2020-2023  润新知