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

    一、学习路线如下:

    image

    二、了解进程

    1.什么是进程?

        进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

        进程具有自己的生命周期和不同的状态。

    2.进程的特点

       1)独立性。

        进程是系统中独立存在的实体,它可以拥有自己的独立资源,每一个进程都有自己的私有地址空间;在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。

        2)动态性

        进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合;进程具有自己的生命周期和各种不同的状态。
         3)并发性
             多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。

    3.进程的生命周期

            父进程,复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:Centos5/6: init Centos7: systemd


         子进程,继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程exec 自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时, 子进程会关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。

    image

    三、进程信息的查看

    1.ps命令

        常用组合:

        ps aux #查看系统中所有进程,使用BSD操作系统格式
         ps -le #查看系统中所有进程,使用linux标准命令格式

        常用选项:

            a 显示当前终端下的所有进程,包括其他用户的进程
             u 显示进程拥有者、状态、资源占用等的详细信息(注意有“-”和无“-”的区别)
             x 显示没有控制终端的进程。通常与a这个参数一起使用,可列出较完整信息
             o 自定义打印内容
             -e 显示所有进程。
             -f 完整输出显示进程之间的父子关系
             -l 较长、较详细的将该进程的信息列出

    [root@jiangfeng1 ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1  19348  1560 ?        Ss   02:24   0:01 /sbin/init
    root          2  0.0  0.0      0     0 ?        S    02:24   0:00 [kthreadd]
    ………………

        ps命令的输出

    USER:该进程是由哪个用户产生的;
    PID:进程的ID号;
    %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗资源;
    %MEM:该进程占用物理内存的百分比,占用越高,进程越耗资源;
    VSZ:该进程占用虚拟内存的大小,单位KB;
    RSS:该进程占用实际物理内存的大小,单位KB;
    TTY:该进程是在哪个终端运行的。
    STAT:进程状态。
        R:运行
        S:睡眠
        T:停止状态
        s:包含子程序
        +:位于后台
    START:该进程的启动时间
    TIME:该进程占用CPU的运算时间
    COMMAND:产生此进程的命令名

    2.top命令

    top [选项]
             -d 秒数:指定top命令每隔几秒更新。默认是3秒
             -b :使用批处理模式输出。一般和“-n”选项合用
             -n 次数 :指定top命令执行的次数。
         在top命令的交互模式当中可以执行的命令:
             ?或h :显示交互模式的帮助
             P :以CPU使用率排序,默认就是此项
             M :以内存的使用率排序
             N :以PID排序
             q :退出top

    top - 22:33:23 up 3:13, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1867048 total, 1566448 free, 96856 used, 203744 buff/cache KiB Swap: 4194300 total, 4194300 free, 0 used. 1588808 avail Mem 第一行:系统当前时间 ; 系统的运行时间 ; 当前登录了两个用户 ; 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。

    第二行:系统中得进程总数 ; 正在运行的进程数 ; 睡眠的进程 ; 正在停止的进程 ; 僵尸进程

    第三行:用户模式占用的cpu百分比 ; 系统模式占用的cou百分比 ; 改变过优先级的用户进程占用的cpu百分比 ; 空闲CPU的CPU百分比 ; 等待输入/输出的进程的占用CPU百分比 ; 硬中断请求服务占用的CPU百分比 ; 软中断请求服务占用的CPU百分比 ; st(Steal time)虚拟时间百分比。就是当有虚拟机 时,虚拟CPU等待实际CPU的时间百分比(注:CPU占用率一般不能高于80%

    第四行:整体内存 ; 使用的内存 ; 空闲的内存 ; 缓冲

    第五行:交换分区的总大小 ; 使用的交换分区的大小 ; 空闲交换分区的大小 ; 作为缓存的交换分区的大小 注: 缓冲:加速数据的写入 缓存:加速数据的读取

    四、修改进程的优先级

    Linux操作系统是一个多用户、多任务的操作系统,Linux系统中通知运行着非常多的进程。但是CPU在同一个时钟周期内只能运算一个指令。进程优先级决定了每个进程处理的先后顺序。

    [root@jiangfeng1 ~]# ps -le | head
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0      1      0  0  80   0 -  4837 poll_s ?        00:00:01 init
    1 S     0      2      0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
    1 S     0      3      2  0 -40   - -     0 migrat ?        00:00:00 migration/0


         PRI代表Priority,NI代表Nice。这两个值都是优先级,数字越小代表该进程优先级越高
             注:用户只能更改Nice,不能更改Priority
                 NI的值得范围是-20到19
                 普通用户调整NI的范围是0到19,而且只能调整自己的进程
                 普通用户只能调高NI值,而不能降低
                 root用户才能设定进程NI值为负值,而且可以调整任何用户的进程
                 PRI(最终值)=PRI(原始值)+NI

    1.调整正在运行进程的优先级

        1)在top中修改

            在top中按’r’,输入你想要调整的PID,再输入想要更改的ni值

    image

    image

        2)命令行使用renice调整

        renice NI值 PID

        实例:

    [root@jiangfeng1 ~]# renice -10 2972
    2972: old priority 0, new priority -10
    
    [1]+  Stopped                 top

    image

    2.程序运行时指定优先级(nice)


    [root@jiangfeng1 ~]# nice -n -5 sleep 500 &
    [2] 3025
    [root@jiangfeng1 ~]# ps axo command,pid,priority,nice | grep sleep
    sleep 500                     3025  15  -5
    grep sleep                    3040  20   0

    五、进程的运行状态控制

        用户通过给进程发送信息来控制进程的状态。

        常见的信号如下:

    image

    杀死进程的命令:

    1.kill -HUP PID

    2.killall [选项][信号] 进程名
                 -i:交互式
                 -I:忽略进程名的大小写
    3.pkill [选项] [信号] 进程名
               -t:终端号

    4.杀死用户进程

        注:只能超级用户才能踢出用户

    image

    六、进程的其他命令

    # jobs 查看当前终端后台的进程
    # fg  把后台进程放到前台来运行
    # bg  把后台暂停的进程放到后台运行
    # fg %1 将作业1调回到前台
    # bg %2 把后台编号为2的进程恢复运行状态
  • 相关阅读:
    shell编程:字符串处理方式
    shell编程:变量替换
    export的用法
    docker stack利用secrets启动wordpress
    docker swarm创建swarm集群
    docker x509: certificate has expired or is not yet valid
    docker-compose的scale的用法
    字符串函数-unquote()函数
    Sass-@each
    Sass-@while
  • 原文地址:https://www.cnblogs.com/feng0919/p/11210215.html
Copyright © 2011-2022 走看看