day21——进程管理之进程的状态及监控

1.什么是进程?

定义

程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合。而进程是正在执行中的程序。当程序被执行时,执行人的权限和属性,以及程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID,称为 PID(进程 ID)。
在使用 Windows 系统的过程中,使用任务管理器,很大程度上是为了强制关闭“未反应”的软件,也就是杀死进程。的确,这是很多使用进程管理工具或进程管理命令的人最常见的使用方法。不过,杀死进程(强制中止进程)只是进程管理工作中最不常用的手段,因为每个进程都有自己正确的结束方法,而杀死进程是在正常方法已经失效的情况下的后备手段。

子进程与父进程

某些进程会产生一些新的进程,我们把这些进程称作子进程,而把这个进程本身称作父进程。比如,我们必须正常登录到 Shell环境中才能执行系统命令,而 Linux 的标准 Shell 是 bash。我们在 bash 当中执行了 ls 命令,那么 bash 就是父进程,而 ls 命令是在 bash 进程中产生的进程,所以 ls 进程是 bash 进程的子进程。也就是说,子进程是依赖父进程而产生的,如果父进程不存在,那么子进程也不存在了。但如果父进程死亡,子进程依然存在,这种进程被称为僵尸进程。

2.程序与进程之间有什么区别?

程序是经验概念,本身作为一种软件资源长期保存,而进程是程序是执行过程,它是动态概念,有一定的生命周期,是动态产生和消亡的。
程序和进程无一一对应关系,一个程序可以由多个进程共有;另外,一个进程在活动中可以有序的执行若干个程序。

3.进程的生命周期?

每一个进程都有其生命周期,例如创建、运行、终止和消除。这些阶段会在系统启动和运行中重复无数次。因此,进程的生命周期对于其性能的分析是非常重要的。

4.进程运行的状态指标?

状态标识 状态描述
R (TASK_RUNNING) 运行状态,即包括了上图中的就绪状态和运行状态
S (TASK_INTERRUPTIBLE) 可中断的睡眠状态,即上图中的阻塞状态。在这个状态下进程是可被中断的,即收到信号之后可以执行信号处理函数
D (TASK_UNINTERRUPTIBLE) 不可中断的睡眠状态。磁盘IO时会出现这种状态,在此状态下,进程是不能被中断的,即不能响应信号。但是可以响应外部硬件中断
T (TASK_STOPPED) 停止状态。记得是大写的T。当进程收到SIGSTOP信号后就处于停止状态,可以发送SIGCONT信号让进程继续运行
X (TASK_DEAD - EXIT_DEAD) 退出状态(死亡状态)。进程即将被销毁,通常是在父进程中设置SIGCHLD信号的handler为SIG_IGN,显式忽略了SIGCHLD信号。在使用ps命令查看进程状态时很难捕捉到这种状态
Z (TASK_DEAD - EXIT_ZOMBIE) 僵尸状态。子进程先于父进程退出,并且父进程没有调用wait或waitpid回收子进程。此时子进程即处于僵尸状态
t(TASK_TRACED) 跟踪状态,记得是小写的t,和停止状态只是大小写的区别。当利用gdb调试某个程序,程序停留在某个断点处时,就处于跟踪状态。

当利用命令:ps -aux 查看进程状态时,STAT字段还有其他的一些字符,其中部分表示如下:

状态符号 状态描述
< 高优先级
N 低优先级
L 有pages在内存中locked。用于实时或者自定义IO。
s 进程领导者,其有子进程。
l 多线程
+ 位于前台进程组。

5.如何监控进程的状态、静态ps、动态top?

动态监控进程:top

top命令

top的其中九列内容及详解:

内容 详解
Tasks: 154 total 任务总数
2 running 有两个进程正在运行
99sleeping 99睡眠
1 stopped 1个挂起 停止
0 zombie 僵尸进程 # 0.3 us 进程占用cpu的百分比(用户进程)
0.0 sy 内核进程 (硬件) # 0.0 ni 优先级的进程占用cpu的百分比
99.7 id 空闲的进程 # 0.0 wa 大量的等待 -->
0.0 hi 硬中断
0.0 si 软中断 # 0.0 st 虚拟机占用物理CPU的时间

top命令显示的信息:
第一行:系统时间,运行时间,登录用户数,系统负载(分别为1分钟、5分钟、15分钟的平均值)
第二行:进程总数、运行中的,睡眠中的'挺值得,僵尸的
第三行:用户占用资源、系统内核占用资源,改变过优先级的进程、空闲的资源,等待输出的时间。
此行数据均为CPU数据并以百分比格式显示,例如"99.2id"以为着有99.2% CPU 资源正在空闲中
第四行:物理内存总量,使用量,空闲量,作为内核缓存的内存量
第五行:虚拟内存总量,使用量,空闲量,已被提前加载的内存数据

静态查看进程:ps(可用“-ef”,个人喜用参数“aux”)

image.png

ps aux
的其中九列内容及详解:

内容 详解
USER 进程的所有者
PID 进程的ID号
%CPU 运算器占用率
%MEM 内容占有率
VSZ 虚拟内存使用量(单位是KB)
RSS 占用的固定内存量(单位是KB)
TTY 所在终端
STAT 进程状态
START 被启动的时间
TIME 实际使用CPU的时间
COMMAND 命令名称与参数

6.进程中的iowait 软中断 硬中断?

(1) 硬中断
由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。
(2) 软中断
软中断是一组静态定义的下半部接口,可以在所有处理器上同时执行,即使两个类型相同也可以。为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。但一个软中断不会抢占另一个软中断,唯一可以抢占软中断的是硬中断。
(3)硬中断和软中断的区别

  • 软中断是执行中断指令产生的,而硬中断是由外设引发的。
  • 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。
  • 硬中断是可屏蔽的,软中断不可屏蔽。
  • 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时- 间,称为上半部。
  • 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

你可能感兴趣的:(day21——进程管理之进程的状态及监控)