Linux—进程管理

Linux 进程管理

1、进程管理介绍

1.1 什么是进程?

进程(Process)是计算机中的 程序关于某 数据集合上的一次 运行活动,是系统进行 资源分配和调度基本单位,是操作系统结构的基础。
简而言之: 进程就是运行中的程序。

1.2 什么是程序?

程序是人使用 计算机语言编写的可以实现特定目的或解决特定问题的代码集合。

1.3 进程的组成部分

  • 已分配内存的地址空间
  • 安全属性,包括所有权凭据和特权
  • 程序代码的一个或多个执行线程
  • 进程状态

1.4 进程的环境

  • 本地和全局变量
  • 当前调度上下文
  • 分配的系统资源,如文件描述符和网络端口

1. 5进程管理的作用

  • 判断服务器健康状态:运维工程师最主要的工作就是保证服务器安全稳定的运行。理想的状态是,在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。
  • 查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服务运行。
  • 杀死进程:这是进程管理中最不常用的手段,当我需要停止服务时,会通过正确关闭命令来停止服务(如 apache 服务可以通过 systemctl stop apache 来关闭)。只有当正常终止进程的手段失效的情况下,才会考虑使用 kill 命令杀死进程(你不是杀手,不要什么进程都用 kill来终止,否则非常容易导致服务器崩溃)。

1.6 进程的生命周期

当程序运行的时候会由父进程通过fock创建子进程来处理任务;子进程被创建后开始处理任务,当任务处理完毕后就会退出,然后子进程会通知父进程来回收资源;如果子进程处理任务期间,父进程意外终止了,那么这个子进程就变成了僵尸进程。

Linux—进程管理

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值

//&#x8C03;&#x6574;&#x5DF2;&#x7ECF;&#x542F;&#x52A8;&#x7684;&#x8FDB;&#x7A0B;&#x7684;nice&#x503C;&#xFF1A;
    renice NI PID&#xFF08;&#x4F8B;&#xFF1A;renice 3 3704&#xFF09;
//&#x5728;&#x542F;&#x52A8;&#x65F6;&#x6307;&#x5B9A;nice&#x503C;&#xFF1A;&#xFF08;-20&#xFF0C;19&#xFF09;
    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
#&#x67E5;&#x770B;&#x7CFB;&#x7EDF;&#x4E2D;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#xFF0C;&#x4F7F;&#x7528;BSD&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x683C;&#x5F0F;

[root@zsl ~]# ps -ef    /&#x5E38;&#x7528;&#x7684;&#x9009;&#x9879;ps -ef
#&#x67E5;&#x770B;&#x7CFB;&#x7EDF;&#x4E2D;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#xFF0C;&#x4F7F;&#x7528;Linux&#x6807;&#x51C6;&#x547D;&#x4EE4;&#x683C;&#x5F0F;&#x3002;

&#x9009;&#x9879;&#xFF1A;
a&#xFF1A;   //&#x663E;&#x793A;&#x4E00;&#x4E2A;&#x7EC8;&#x7AEF;&#x7684;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#xFF0C;&#x9664;&#x4E86;&#x4F1A;&#x8BDD;&#x5F15;&#x7EBF;
u&#xFF1A;   //&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x7684;&#x5F52;&#x5C5E;&#x7528;&#x6237;&#x53CA;&#x5185;&#x5B58;&#x7684;&#x4F7F;&#x7528;&#x60C5;&#x51B5;
x&#xFF1A;   //&#x663E;&#x793A;&#x6CA1;&#x6709;&#x63A7;&#x5236;&#x7EC8;&#x7AEF;&#x7684;&#x8FDB;&#x7A0B;
f:  //&#x67E5;&#x770B;&#x8FDB;&#x7A0B;&#x7236;&#x5B50;&#x5173;&#x7CFB;
k:  //&#x6839;&#x636E;&#x8FDB;&#x7A0B;&#x5C5E;&#x6027;&#x6392;&#x5E8F;&#xFF0C;&#x52A0;-&#x8868;&#x793A;&#x5012;&#x5E8F;

-e      //&#x663E;&#x793A;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#xFF0C;&#x4E0E;-A&#x6548;&#x679C;&#x76F8;&#x540C;
-f      //&#x663E;&#x793A;&#x66F4;&#x8BE6;&#x7EC6;&#x7684;&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#x7684;&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;
-l      //&#x663E;&#x793A;&#x66F4;&#x591A;&#x4FE1;&#x606F;
-u      //&#x663E;&#x793A;&#x6307;&#x5B9A;&#x7528;&#x6237;&#x542F;&#x52A8;&#x7684;&#x8FDB;&#x7A0B;
-o      //&#x6839;&#x636E;&#x81EA;&#x5DF1;&#x7684;&#x9700;&#x8981;&#x9009;&#x62E9;&#x8981;&#x663E;&#x793A;&#x7684;&#x5B57;&#x6BB5;

[root@zsl ~]# ps auxk -%cpu     //&#x6839;&#x636E;CPU&#x4F7F;&#x7528;&#x7387;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#xFF0C;&#x4ECE;&#x9AD8;&#x5230;&#x4F4E;
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     //&#x8868;&#x793A;&#x53EA;&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x53F7;&#xFF0C;&#x547D;&#x4EE4;&#xFF0C;nice&#x503C;&#x4E09;&#x4E2A;&#x5B57;&#x6BB5;
    PID COMMAND          NI
   1507 bash              0
   1535 ps                0

ps aux输出结果

[root@zsl ~]# ps aux        #&#x67E5;&#x770B;&#x7CFB;&#x7EDF;&#x4E2D;&#x6240;&#x6709;&#x7684;&#x8FDB;&#x7A0B;
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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis 为什么使用单进程单线程方式也这么快(转载)

    Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写。官方提供的数据是可以达到100000+的 qps。这个数据不比采用单进程多线程的同样基于内…

    Linux 2023年5月28日
    078
  • 30款提升组织效能 SaaS 工具,我们的宝藏工具箱大公开

    熟悉 Juicedata 的小伙伴知道,从2017年成立到第一款产品发布、从寻找PMF(Product Market Fit) 到开源,我们一直保持着一个精简的团队配置,不少人都很…

    Linux 2023年6月14日
    0179
  • 高速USB转8串口产品设计-TTL串口

    基于480Mbps 高速USB转8路串口芯片CH348,可以为各类主机扩展出8个独立的串口。使用厂商提供的VCP串口驱动程序,可支持Windows、Linux、Android、ma…

    Linux 2023年6月7日
    069
  • 使用7z程序CLI实现基础功能

    阅文时长 | 0.64分钟字数统计 | 1025.6字符主要内容 | 1、引言&背景 2、压缩 3、解压 4、更多命令可见 5、声明与参考资料『使用7z程序CLI实现基础功…

    Linux 2023年6月14日
    091
  • 高等代数:6 二次型 矩阵的合同

    6 二次型 (\cdot) 矩阵的合同 1、定义1:数域K上一个 n元二次型是系数在K中的n个变量的二次齐次多项式,它的一般形式是 [\begin{aligned} &f(…

    Linux 2023年6月8日
    0119
  • ASP.NET Core 2.2 : 二十七. JWT与用户授权(细化到Action)

    上一章分享了如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新,本章继续进行下一步,用户授权。涉及到的例子也以上一章的为基础。(ASP.NET Core 系…

    Linux 2023年6月7日
    097
  • list底层实现

    list和vector都是容器,只不过他们的存储结构不同,vector实际底层结构是顺序表,支持随机访问。list的底层结构带头双向链表,不支持随机访问。 但list的底层实现不同…

    Linux 2023年6月13日
    0102
  • linux添加磁盘及分区挂载

    磁盘管理 1.为什么要添加磁盘 2.系统添加磁盘并分区 磁盘管理 1.为什么要添加磁盘 随着系统的使用,磁盘的内容会越来越少,所以有必要添加磁盘来增加空间。 [En] With t…

    Linux 2023年5月27日
    089
  • 每日好书推荐:《Kali Linux渗透测试的艺术》PDF高清版

    Original: https://www.cnblogs.com/bnn86/p/15344056.htmlAuthor: 测试楠楠君Title: 每日好书推荐:《Kali Li…

    Linux 2023年5月27日
    0103
  • Gitlab 403 forbidden 并发引起IP被封

    问题 在工作中自搭建的Gitlab。但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden。 原因 Gitlab使用rack_attack做了并发访问的限制。 解…

    Linux 2023年6月14日
    076
  • 认识2020年的苹果设计奖获奖者

    苹果设计奖表彰那些在苹果平台上反映最佳设计、创新和技术的开发者的创造性艺术和技术成就。 塑钢3DShapr3D Zrt. 运行CAD软件通常需要一台具有相当处理能力的台式电脑。Sh…

    Linux 2023年6月7日
    072
  • Harbor部署

    harbor 无论是使用Docker-distribution去自建仓库,还是通过官方镜像跑容器的方式去自建仓库,通过前面的演示我们可以发现其是非常的简陋的,还不如直接使用官方的D…

    Linux 2023年6月7日
    0100
  • 【VirtualBox】VirtualBox磁盘扩容

    我的VirtualBox里面运行着Ubuntu镜像,最初创建时设置的时20G,开发过程中就不够用了 查询磁盘使用情况 df-h 查询磁盘的使用空间确实已经到了极限 扩容步骤: 1….

    Linux 2023年6月13日
    089
  • Docker安装Portainer

    Docker安装Portainer Docker介绍 Docker是一个开源的容器引擎,完全使用沙箱机制,相互之间不会有任何接口,并且容器性能开销低,让开发者可以打包应用或者依赖包…

    Linux 2023年6月6日
    0116
  • Linux下使用ssh测试端口是否开启

    当服务器上不允许使用telnet时,可以使用ssh测试远程服务器端口是否开启 具体命令如下 -v 显示连接debug信息 -p port 指定端口 ssh -v -p 80 roo…

    Linux 2023年6月7日
    0105
  • Jmeter环境变量配置你不得不知道的事情

    在安装Jmeter的过程中大家肯定需要配置环境,但是为什么要配置JDK的环境变量呢?大家有没有好奇过,有没有仔细去像一下呢,其实在安装Jmeter前,大家应该都知道Jmeter是我…

    Linux 2023年6月14日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球