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的其中九列内容及详解:
内容 | 详解 |
---|---|
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”)
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)硬中断和软中断的区别
- 软中断是执行中断指令产生的,而硬中断是由外设引发的。
- 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。
- 硬中断是可屏蔽的,软中断不可屏蔽。
- 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时- 间,称为上半部。
- 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。