[转帖]Linux下进程管理知识(详细)总结

linux,进程,管理,知识,详细,总结 · 浏览次数 : 0

小编点评

**进程状态** * TASK_RUNNING(运行)——进程是可执行的,它或者正在执行,或者在运行队列中等待执行。 * TASK_INTERRUPTIBLE(可中断)——进程正在睡眠(也就是说它被阻塞)等待某些条件的达成。一旦这些条件达成,内核就会把进程状态设置为运行,处于此状态的进程也会因为接收到信号而提前被唤醒并投入运行。 * TASK_UNINTERRUPTIBLE(不可中断)——除了不会因为接收到信号而被唤醒从而投入运行外,这个状态与可打断状态相同。这个状态通常在进程必须在等待时不受干扰或等待事件很快就会发生时出现。 * TASK_ZOMBIE(僵死)——该进程已经结束了,但是其父进程还没有调用wait4()系统调用。为了父进程能够获知它的消息,子进程的进程描述符仍然被保留着。一旦父进程调用了wait4(),进程描述符就会被释放。 * TASK_STOPPED(停止)——进程停止执行,进程没有投入运行也不能投入运行。通常这种状态发生在接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的时候。此外,在调试期间接收到任何信号,都会使进程进入这种状态。 **进程状态 task_struct 中的 state 描述进程的当前状态** * 1:TASK_RUNNING(运行) * 2:TASK_INTERRUPTIBLE(可中断) * 3:TASK_UNINTERRUPTIBLE(不可中断) * 4:TASK_ZOMBIE(僵死) * 5:TASK_STOPPED(停止) **其他相关链接** * Linux系统top命令详细总结 *归纳总结以上内容,生成内容时需要带简单的排版

正文

一、简介

本文主要详细介绍进程相关的命令的使用、进程管理及调度策略的知识。

二、常用的命令解析

1、ps命令

命令选项解析
-a显示一个终端所有的进程
-u显示进程的归属用户和内存占用情况
-x显示没有控制终端的进程
-l长格式显示更详细的信息
-e显示所有进程
-w宽行显示,可以使用多个w进行加宽显示

进程常见状态有:

R运行状态(running)
S睡眠状态(sleeping)
D磁盘休眠状态(Disk sleep),不可中断
T停止状态(stopped)
Z僵尸状态(Zombies)
其他附加符号:
<    高优先级
N    低优先级
L    有些页被锁进内存
s    包含子进程
+ 位于前台的进程组(网上有很多错误说法,说带+为后台进程组,可通过后面的例子验证:sleep 100和sleep 200&,然后ps|grep sleep确认);
l 多线程,克隆线程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
  • 12
[root@localhost 桌面]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.1 120252  5844 ?        Ss   12:56   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
root         2  0.0  0.0      0     0 ?        S    12:56   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    12:56   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   12:56   0:00 [kworker/0:0H]
    项目解释
    USER进程属主的用户名
    PID进程 ID
    %CPU进程占用的 CPU 百分比
    %MEM进程使用的内存百分比
    VSZ进程的虚拟大小
    RSS驻留内存大小(内存中的页数)
    TTY控制终端 ID

    2、命令w查看当前系统信息

    [root@bogon cron]# w
    14:48:39 up 2:46, 1 user,     load average: 0.00,   0.01,   0.00
    USER     TTY       FROM             LOGIN@     IDLE   JCPU   PCPU WHAT
    root       pts/1    192.168.203.1 12:27      0.00s   0.17s   0.02s w
    
      内容显示信息的含义
      JCPU以终端代号来区分,该终端所有相关的进程的进程执行时,所消耗的CPU时间会显示在这里
      PCPUcpu执行程序消耗的时间
      WHAT用户下在执行的操作
      load average分别显示系统在过去1、5、15分钟内的平均负载程度
      FROM显示用户从何处登录系统,":0"的显示代表该用户时人X Windows下,打开文本模式窗口登录的
      IDLE用户闲置的时间,这是一个计时器,一旦用户执行任何操作,该计时器便会被重置

      3、pstree命令产看进程树
      命令选项:
      -p:显示进程的PID
      -u:显示进程的所属用户

      4、top命令

      具体参数可以参考该链接Linux系统top命令详细总结

      [root@localhost 桌面]# top
      top - 22:33:04 up 2 min,  2 users,  load average: 0.85, 0.62, 0.25
      Tasks: 155 total,   2 running, 153 sleeping,   0 stopped,   0 zombie
      %Cpu(s):  3.4 us,  1.4 sy,  0.0 ni, 95.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      KiB Mem :  2967536 total,  2249804 free,   303732 used,   414000 buff/cache
      KiB Swap:  4194300 total,  4194300 free,        0 used.  2509432 avail Mem 
      

      PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
      1183 root 20 0 288780 67084 34176 S 3.0 2.3 0:01.86 Xorg.bin
      2218 root 9 -11 620700 29496 23820 S 2.0 1.0 0:00.79 mate-termin+
      1661 root 9 -11 726344 33816 27408 S 0.7 1.1 0:02.16 caja

        5、vmstat
        vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
        一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

        root@ubuntu:~# vmstat 2 1
        
        • 1

        6、优先级修改nice命令
        基本格式为nice -n 数值 进程名。在前面ps -le命令中,表示优先级的列有PRI(priority)和NI(nice),真正的优先级由PRI决定,数值越小优先级越高。用户只能修改NI的值,修改后的PRI=原PRI+NI。

        PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND      
        1191 root      20   0  241392  51576  22724 S  2.5  1.7   0:05.31 Xorg.bin     
        2200 root       9 -11  629840  32464  25096 S  1.9  1.1   0:03.91 mate-termin+
        
          名称含义
          PID进程 ID 每个进程都会从内核获取一个唯一的 ID 值。绝大多数用来操作进程的命令和系统调用,都需要用 PID 指定操作的进程对象
          PPID父进程 ID 在 Unix 和 Linux 系统中,一个已经存在的进程必须“克隆”它自身来创建一个新的进程。当新的进程克隆后,最初的进程便作为父进程存在。
          UID & EUID真实用户 ID 和有效用户 ID 一个进程的 UID 是其创建者的身份标志(也是对其父进程 UID 的复制)。通常只有进程的创建者和超级用户才有操作该进程的权限。EUID 是一个额外的 UID,用来决定在任意一个特定时间点,一个进程有权限访问的文件和资源。对绝大多数进程而言,UID 和 EUID 是相同的(特殊情况即 setuid)

          8、kill命令
          kill 命令常用来终止某个进程,它可以向进程传递任意信号(默认为 TERM)。

          [root@localhost 桌面]# kill [-signal] pid
          
          • 1

          不带任何数字(信号)选项的 kill 命令并不能保证指定进程被杀死,因为 kill 命令默认发送 TERM 信号,而 TERM 是可以被捕获、屏蔽或忽略的。
          可以使用 kill -9 pid 命令强制杀死进程(9 代表 KILL 信号,不可被捕获、屏蔽或忽略)。
          kill 命令需要指定进程的 PID 号。
          pgrep 命令可以通过程序名称(或其他属性如 UID)筛选进程号,pkill 命令可以直接发送指定信号给筛选结果。

          [root@localhost 桌面]#  pkill -u ben
          
          • 1

          该命令将发送 TERM 信号给所有属于用户 ben 的进程。
          killall 命令可以通过程序名称杀死指定进程的所有实例。如:

          [root@localhost 桌面]# killall apache2
          
          • 1

          三、进程的管理

          进程调度的的分级
          3.1 高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:
          高级调度
          (High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;
          低级调度
          (Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;
          中级调度
          (Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。

          3.2 进程调度 - 进程调度的时机
          进程调度发生在什么时机呢?这与引起进程调度的原因以及进程调度的方式有关。
          引起进程调度的原因有以下几类,
          (1)正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源。
          (2)执行中进程自己调用阻塞原语将白己阻塞起来进入睡眠等状态。
          (3)执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了v原语操作激活了等待资源的进程队列。
          (4)执行中进程提出I/O请求后被阻塞。
          (5)在分时系统中时间片已经用完。
          (6)在执行完系统调用等系统程序后返回用户进程时,这时可看作系统进程执行完毕,从而可调度选择一新的用户进程执行。
          以上都是在可剥夺方式下的引起进程调度的原因。在CPU执行方式是可剥夺时.还有
          (7)就绪队列中的某进程的优先级变得高于当前执行进程的优先级,从而也将引发进程调度。

          3.3 两种占用CPU的方式
          可剥夺式 (可抢占式 preemptive):就绪队列中一旦有优先级高于当前执行进程优先级的进程存在时,便立即发生进程调度,转让处理机。
          不可剥夺式(不可抢占式non_preemptive):即使在就绪队列存在有优先级高与当前执行进程时,当前进程仍将占用处理机知道该进程自己因调用原语操作或等待I/O而进入阻塞、睡眠状态,或时间片用完时才重新发生调度让出处理机。

          3.4 进程调度 - 进程调度算法
          1.先进先出算法(FIFO):按照进程进入就绪队列的先后次序来选择。即每当进入进程调度,总是把就绪队列的队首进程投入运行。
          2.时间片轮转算法(RR):分时系统的一种调度算法。轮转的基本思想是,将CPU的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
          3.最高优先级算法(HPF):进程调度每次将处理机分配给具有最高优先级的就绪进程。最高优先级算法可与不同的CPU方式结合形成可抢占式最高优先级算法和不可抢占式最高优先级算法。
          4.多级队列反馈法:几种调度算法的结合形式多级队列方式。

          3.5 进程状态
          task_struct中的state描述进程的当前状态。进程的状态一共有5种,而进程必然处于其中一种状态:
          在这里插入图片描述

          1)TASK_RUNNING(运行)——进程是可执行的,它或者正在执行,或者在运行队列中等待执行。这是进程在用户空间中执行唯一可能的状态;也可以应用到内核空间中正在执行的进程。
          2)TASK_INTERRUPTIBLE(可中断)——进程正在睡眠(也就是说它被阻塞)等待某些条件的达成。一旦这些条件达成,内核就会把进程状态设置为运行,处于此状态的进程也会因为接收到信号而提前被唤醒并投入运行。
          3)TASK_UNINTERRUPTIBLE(不可中断)——除了不会因为接收到信号而被唤醒从而投入运行外,这个状态与可打断状态相同。这个状态通常在进程必须在等待时不受干扰或等待事件很快就会发生时出现。由于处于此状态的任务对信号不作响应,所以较之可中断状态,使用得较少。
          4)TASK_ZOMBIE(僵死)——该进程已经结束了,但是其父进程还没有调用wait4()系统调用。为了父进程能够获知它的消息,子进程的进程描述符仍然被保留着。一旦父进程调用了wait4(),进程描述符就会被释放。
          5)TASK_STOPPED(停止)——进程停止执行,进程没有投入运行也不能投入运行。通常这种状态发生在接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的时候。此外,在调试期间接收到任何信号,都会使进程进入这种状态。
          需要调整进程的状态,最好使用set_task_state(task, state)函数,在必要的时候,它会设置内存屏障来强制其他处理器作重新排序(SMP)。
          进程的各个状态之间的转化构成了进程的整个生命周期。

          其他相关链接:

          Linux系统top命令详细总结

          与[转帖]Linux下进程管理知识(详细)总结相似的内容:

          [转帖]Linux下进程管理知识(详细)总结

          一、简介 本文主要详细介绍进程相关的命令的使用、进程管理及调度策略的知识。 二、常用的命令解析 1、ps命令 命令选项解析-a显示一个终端所有的进程-u显示进程的归属用户和内存占用情况-x显示没有控制终端的进程-l长格式显示更详细的信息-e显示所有进程-w宽行显示,可以使用多个w进行加宽显示 进程常

          [转帖]Linux系统:page fault

          Linux进程如何访问内存 Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源,原因后面会讲到。 为什么需要虚拟内存地址空间 假设某个进程需要4MB的空间,内存假设是1MB的,如果进程直接使用物理地址,这个进程会因为内存不足跑不起来。既然进程不是直接访问物理内存,

          [转帖]linux下 进程io队列,IO队列和IO调度

          IO体系概览 先看看本文主题IO调度和IO队列处于整个IO体系的哪个位置,这个IO体系是非常重要的,了解IO体系我们可以对整个IO过程有个全面的认识。虽然一下两下并不清楚IO体系各个部分的细节,但是我们总是能从这儿找到脉络。知道什么问题在什么位置,这个是解决问题的时候最关键的。任何所谓的专家都不太可

          [转帖]Linux下 查看 每个进程占用的网络带宽 - NetHogs

          https://www.cnblogs.com/xuyaowen/p/NetHogs.html 今天在服务器上进行测试程序,发现网速占用比较大,但不是我的程序。可能是其他同学在下载或者上传数据,所以需要看到底是哪个进程。 这时候使用 iftop, vnstat 等命令不能看出具体是哪个进程占用,因为

          [转帖]Linux下strace调试系统应用参数总结(附实例操作讲解)

          文章目录 一、简介二、常用参数详解三、实例详解3.1 跟踪具体进程3.2 监控具体程序执行过程 四、其他相关知识链接 一、简介 strace命令是一个集诊断、调试、统计与一体的Linux 用户空间跟踪器,我们可以使用strace对应用的系统调用、信号传递和进程状态变更的监控结果来对应用进行分析,以达

          [转帖]Linux下strace调试系统应用参数总结(附实例操作讲解)

          文章目录 一、简介二、常用参数详解三、实例详解3.1 跟踪具体进程3.2 监控具体程序执行过程 四、其他相关知识链接 一、简介 strace命令是一个集诊断、调试、统计与一体的Linux 用户空间跟踪器,我们可以使用strace对应用的系统调用、信号传递和进程状态变更的监控结果来对应用进行分析,以达

          [转帖]Linux性能优化(十五)——CPU绑定

          一、孤立CPU 1、孤立CPU简介 针对CPU密集型的任务,CPU负载较高,推荐设置CPU Affinity,以提高任务执行效率,避免CPU进行上下文切换,提高CPU Cache命中率。 默认情况下,Linux内核调度器可以使用任意CPU核心,如果特定任务(进程/线程)需要独占一个CPU核心并且不想

          [转帖]【学习笔记】Linux下CPU性能评估

          Linux下CPU性能评估 1、 vmstat监控CPU使用情况 【说明】 procs: l r表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU的个数,就说明CPU不足,需要增加CPU。 l b表示在等待资源的进程数,比如正在等待I/O或者内存交换等。 memory: l swpd:

          [转帖]一文解决内核是如何给容器中的进程分配CPU资源的?

          https://zhuanlan.zhihu.com/p/615570804 现在很多公司的服务都是跑在容器下,我来问几个容器 CPU 相关的问题,看大家对天天在用的技术是否熟悉。 容器中的核是真的逻辑核吗? Linux 是如何对容器下的进程进行 CPU 限制的,底层是如何工作的? 容器中的 thr

          [转帖]小技巧!如何用 systemtap 排查问题

          https://www.modb.pro/db/79444 霸爷博客,干货满满。有两篇文章现在还记得,《Linux下如何知道文件被哪个进程写》[1]和《巧用Systemtap注入延迟模拟IO设备抖动》[2],周末突然想起来,发现能看懂了:) 本文虽然说是小技巧,可是难度一点也不低 ^_^ 什么是 s