Linux 进程管理
1、进程管理介绍
1.1 什么是进程?
进程(Process)是计算机中的 程序关于某 数据集合上的一次 运行活动,是系统进行 资源分配和调度的 基本单位,是操作系统结构的基础。
简而言之: 进程就是运行中的程序。
1.2 什么是程序?
程序是人使用 计算机语言编写的可以实现特定目的或解决特定问题的代码集合。
1.3 进程的组成部分
- 已分配内存的地址空间
- 安全属性,包括所有权凭据和特权
- 程序代码的一个或多个执行线程
- 进程状态
1.4 进程的环境
- 本地和全局变量
- 当前调度上下文
- 分配的系统资源,如文件描述符和网络端口
1. 5进程管理的作用
- 判断服务器健康状态:运维工程师最主要的工作就是保证服务器安全稳定的运行。理想的状态是,在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。
- 查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服务运行。
- 杀死进程:这是进程管理中最不常用的手段,当我需要停止服务时,会通过正确关闭命令来停止服务(如 apache 服务可以通过 systemctl stop apache 来关闭)。只有当正常终止进程的手段失效的情况下,才会考虑使用 kill 命令杀死进程(你不是杀手,不要什么进程都用 kill来终止,否则非常容易导致服务器崩溃)。
1.6 进程的生命周期
当程序运行的时候会由父进程通过fock创建子进程来处理任务;子进程被创建后开始处理任务,当任务处理完毕后就会退出,然后子进程会通知父进程来回收资源;如果子进程处理任务期间,父进程意外终止了,那么这个子进程就变成了僵尸进程。
1.7 进程的分类
- 前台进程:与终端相关的进程,通过终端启动的进程
- 注意:也可把在前台启动的进程送往后台,以守护模式运行
- 守护进程:daemon,与终端无关的进程(如内核),在系统引导过程中启动的进程
1.8 进程状态
Excuting //运行态
Ready //中断态,也可以称作睡眠态
Uninterruptible sleep //不可中断的睡眠。不可随时唤醒,只有当IO资源加载成功后才能唤醒
Interruptible sleep //可中断的睡眠。可随时唤醒
Zombie //僵尸进程。正常运行结束了,但是不释放占据的内存
Stopped //停止态,暂停于内存中,但不会被调度,除非手动启动之
进程睡眠的原因:
当一个执行中的进程,需要加载额外的IO资源的时候,由于IO设备的速度太慢,所以会转入睡眠状态等待,交出CPU给其他进程,以免浪费剩余执行时间
Linux进程状态
标志 内核定义的状态名称和描述 R TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪 S TASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中 D TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态 K TASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态 T TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复) T TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志 Z EXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放 X EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到 < 高优先级进程 N 低优先级进程 + 前台进程组中的进程 l 多线程进程 s 会话进程首进程
2、进程优先级
2.1 linux进程调度与多任务
现代计算机系统中既包含每次只能执行一个指令的低端处理器,也包含高性能超级计算机,这些超级计算机每台配备数百个CPU,每个CPU上具有多个核心,它们可以并行执行数以百计的指令。但是所有这些系统往往具有一个共同点:它们需要运行的进程数量总是超出实际具有的核心数。
通过时间分片技术,Linux(和其他操作系统)实际能够运行的进程数(和线程数)可以超出可用的实际处理单元数。操作系统进程调度程序将在单个核心上的进程之间进行快速切换,从而给用户一种有多个进程在同时运行的印象。
执行此切换的Linux内核部分称为进程调度程序.
2.2 进程优先级
- 进程优先级范围:0-139,数字越小,优先级越高
- 0-99:实时优先级,内核调整
- 100-139:静态优先级,用户可控制
- 进程优先级高的特点:
- 获得更多的CPU运行时间
- 更优先获得CPU运行的机会
要修改进程的优先级可以通过调整进程的nice值来实现, nice值越小,优先级越高:
nice值的范围是(-20,19),-20对应100,19对应139
2.3 相对优先级
由于不是每种进程都与其他进程同样重要,可告知调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略称为 SCHED_OTHER
(也称为 SCHED_NORMAL
),但还有一些其他策略可用于不同的目的。
由于并非所有进程都以同样的方式创建,可为采用 SCHED_NORMAL
策略运行的进程指定相对优先级。此优先级称为进程的 nice
值。一个进程可以有40种不同级别的 nice
值。
这些 nice
级别的范围是从-20到19。默认情况下,进程将继承其父进程的 nice
级别,通常为0
nice
级别越高,表示优先级越低(该进程容易将其CPU使用量让给其他进程)
nice
级别越低,表示优先级越高(该进程更加不倾向于让出CPU)
如果不存在资源争用(例如当活动进程数少于可用CPU核心数时),即使nice
级别高的进程也将仍使用它们可使用的所有可用CPU资源。但当请求CPU时间的进程数超过可用核心数时,nice
级别较高的进程将比nice
级别较低的进程收到更少的CPU时间
2.4 nice级别与权限
为很占CPU资源的进程设置较低的 nice
级别可能会对同一系统上运行的其他进程的性能造成负面影响,所以仅允许root用户设置负 nice
级别以及降低现有进程的 nice
级别。
普通非特权用户仅允许设置正的 nice
级别。只能对现有进程提升 nice
级别,而不能降低 nice
级别
2.5 进程优先级调整
进程优先级调整:调整nice值
//调整已经启动的进程的nice值:
renice NI PID(例:renice 3 3704)
//在启动时指定nice值:(-20,19)
nice -n NI COMMAND
3、系统状态和进程管理
3.1 ps命令
ps(process state)命令用于列出当前的进程。可以显示详细的进程信息,包括:
- 用户识别符(UID),它确定进程的特权
- 唯一进程识别符(PID)
- CPU和已经花费的实时时间
- 进程在各种位置上分配的内存数量
- 进程的位置STDOUT,称为控制终端
- 当前的进程状态
ps支持的选项格式:
- UNIX(POSIX)选项,可以分组但必须以连字符开头
- BSD 选项,可以分组但不可与连字符同用
注意:
- 加了 [ ] 的,表示内核进程
- exiting或defunct表示僵尸进程
[root@zsl ~]# ps aux
#查看系统中所有进程,使用BSD操作系统格式
[root@zsl ~]# ps -ef /常用的选项ps -ef
#查看系统中所有进程,使用Linux标准命令格式。
选项:
a: //显示一个终端的所有进程,除了会话引线
u: //显示进程的归属用户及内存的使用情况
x: //显示没有控制终端的进程
f: //查看进程父子关系
k: //根据进程属性排序,加-表示倒序
-e //显示所有进程,与-A效果相同
-f //显示更详细的完整格式的进程信息
-l //显示更多信息
-u //显示指定用户启动的进程
-o //根据自己的需要选择要显示的字段
[root@zsl ~]# ps auxk -%cpu //根据CPU使用率进行排序,从高到低
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
rngd 883 2.9 0.8 160108 6512 ? Ssl 14:02 0:02 /sbin/rngd -f --fill-watermark=0
[root@zsl ~]# ps -o pid,comm,ni //表示只显示进程号,命令,nice值三个字段
PID COMMAND NI
1507 bash 0
1535 ps 0
ps aux输出结果
[root@zsl ~]# ps aux #查看系统中所有的进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.5 1.6 179140 13524 ? Ss 14:02 0:01 /usr/lib/systemd/systemd --switched-ro
root 2 0.0 0.0 0 0 ? S 14:02 0:00 [kthreadd]
输出 含义 USER 该进程是由哪个用户产生的; PID 进程的 ID 号; %CPU 该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源; %MEM 该进程占用物理内存的百分比,占用越高,进程越耗费资源; VSZ 虚拟内存,该进程向系统申请的内存空间,单位 KB; RSS 物理内存,该进程实际使用的内存空间,单位 KB; TTY 该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端(可以通过alt+F1-F7 键切换不同的终端),tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用的是 pts/0 终端,第二个远程连接占用 pts/1,依次增长; STAT 进程状态; START 该进程的启动时间; TIME 该进程占用 CPU 的运算时间,注意不是系统时间; COMMAND 产生此进程的命令; STAT进程状态 状态含义 D 不可被唤醒的睡眠状态,通常用于 I/O 情况 R 该进程正在运行 S 该进程在睡眠状态,可被唤醒 T 暂停状态,可能是在后台暂停或进程在出错状态 X 死掉的进程(应该不会出现) Z 僵尸进程。进程已经终止,但是部分程序还在内存当中。 < 高优先级,S
Original: https://www.cnblogs.com/Alone-8712/p/16528278.html
Author: Alone-林
Title: Linux—进程管理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578518/
转载文章受原作者版权保护。转载请注明原作者出处!