Linux--进程状态与优先级

这篇具有很好参考价值的文章主要介绍了Linux--进程状态与优先级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念

进程指的是程序在执行过程中的活动。进程是操作系统进行资源分配和调度的基本单位
进程可以看作是程序的一次执行实体,它包含了程序代码、数据以及相关的执行上下文信息。操作系统通过创建、调度和管理多个进程来实现对计算机系统资源的有效利用。
每个进程都有自己的地址空间、寄存器集合、堆栈等资源,他们与其他进程相互隔离。不同的进程之间可以通过进程间的通信(PIC)机制进行信息交换和数据共享。
简单的来说,进程就是加载到内存的程序

PCB进程控制块

那么如何管理加载到内存的程序呢?
答案是先描述再组织。
Linux--进程状态与优先级,Linux,linux,服务器,运维
而这样管理进程的结构体,我们称之为进程控制块(PCB)。

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合

Linux--进程状态与优先级,Linux,linux,服务器,运维
PCB与进程之间存在着一对一的对应关系,每个进程在系统中都有一个相应的PCB来描述和管理它。当操作系统创建一个新进程时,会为该进程分配一个独立的PCB。
PCB通过维护这些信息,操作系统可以管理和控制进程的状态转换、调度和资源分配。当系统需要切换进程时,它会保存当前进程的上下文信息到该进程的PCB中,然后加载新进程的PCB,并将保存的上下文信息恢复, 从而实现进程间的无缝切换和调度。
Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

PCB的属性(task_struct)

在Linux中,描述进程的结构体叫作task_struct(也就是Linux的PCB)。
Linux--进程状态与优先级,Linux,linux,服务器,运维

查看进程

通过指令

ps ajx

进行查看
Linux--进程状态与优先级,Linux,linux,服务器,运维
PID是进程的唯一标识符

下面写一个简单的C程序来看一下进程
Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维
结果查看:
Linux--进程状态与优先级,Linux,linux,服务器,运维
上面进程中,我们执行指令grep也是进程的一条,当我们查看时,可以忽略他,加上:
Linux--进程状态与优先级,Linux,linux,服务器,运维
我们可以利用while循环,来不断查询当前的进程情况:
Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

获取PID/PPID

PID:是进程的唯一标识符,类似于你在学校专属的学号,可以通过PID查看到对应的进程信息。

在C程序我们也可以通过函数来获取PID
Linux--进程状态与优先级,Linux,linux,服务器,运维

PPID被称为子进程的父进程;当一个进程之中再有一个进程在运行,那么这个在里面的进程被称为子进程,而外面的进程称为父进程;

Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

proc

对proc的查看
Linux--进程状态与优先级,Linux,linux,服务器,运维

执行指令 ls /proc/PID -ld
对执行程序的查询,再将程序退出查询,对比两次的情况
Linux--进程状态与优先级,Linux,linux,服务器,运维

执行指令 ls /proc/PID -l
查看进程的总信息
Linux--进程状态与优先级,Linux,linux,服务器,运维
列举一些比较关键的信息
Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

利用文件的生成查看对应的工作目录(默认在对应的进程工作目录里生成)
Linux--进程状态与优先级,Linux,linux,服务器,运维
更改当前的工作目录时,
Linux--进程状态与优先级,Linux,linux,服务器,运维

创建进程–fork()

fork()是一个系统调用,为当前运行进程创建一个新的子进程。在调用fork之后,操作系统会复制当前进程的所有资源(包括代码、数据、堆栈等),并创建一个全新的进程这个进程被称为子进程,而原来的进程被称为父进程
在fork操作完成后,父进程和子进程是相互独立的,它们有各自独立的内存空间和资源。子进程会继承父进程的属性,例如文件描述符,信号处理程序等。

接下来我们看操作实例:

Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

fork的返回值

Linux--进程状态与优先级,Linux,linux,服务器,运维

俩进程独立操作

Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

利用kill指令杀掉父进程:
Linux--进程状态与优先级,Linux,linux,服务器,运维

一次创建多个进程

Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维
结果:Linux--进程状态与优先级,Linux,linux,服务器,运维

进程状态

进程状态描述了一个进程在执行过程中的不同状态。
常见的进程状态包括:

R运行状态(running) : 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
D磁盘休眠状态(Disk sleep有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态

我们还是利用指令 ps ajx 来查看进程的状态。
Linux--进程状态与优先级,Linux,linux,服务器,运维

Linux--进程状态与优先级,Linux,linux,服务器,运维
如:

Linux--进程状态与优先级,Linux,linux,服务器,运维Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

Linux--进程状态与优先级,Linux,linux,服务器,运维

细节:Linux--进程状态与优先级,Linux,linux,服务器,运维

kill的常用指令Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维

僵尸进程

僵尸进程是一个处于已终止但仍然存在于进程表中的进程。当一个子进程运行结束后,它会向父进程发送一个终止信号。
如果父进程没有及时处理子进程的终止状态,子进程的PCB就会一直存在于系统的进程表中,成为一个僵尸进程。僵尸进程所占用的系统资源非常有限,仅仅保留了它的进程ID、返回值和一些基本信息。

下面来演示下僵尸进程
将子进程优先退出,父进程进入睡眠状态,子进程退出之后,父进程仍然在睡眠状态没有回收子进程的资源;

int main()                                                                                                                                                    
  {
    pid_t id = fork();
    if(id < 0){
    perror("fork");
    return 1;
    }
    else if(id==0)
   {
     printf("child[%d] is begin Z...\n", getpid());
      sleep(5);
      exit(1);
    }
    else 
   {
     printf("parent[%d] is sleeping...\n", getpid());
     sleep(30);
   }
   return 0;
  }  

结果:
Linux--进程状态与优先级,Linux,linux,服务器,运维

僵尸进程的危害

进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎
么样了。可父进程如果一直不读取,那子进程就一直处于Z状态?是的!
维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话
说, Z状态一直不退出, PCB一直在维护。
那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费?是的!因为数据结构
对象本身就要占用内存,想想C中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空间!

孤儿进程

父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?
父进程先退出,子进程就称之为“孤儿进程”
孤儿进程被1号init进程领养,由init进程回收。

例子:
通过让父进程优先退出,来查看进程状态

  7  int main()                                                                                                                                                    
  8   {                                                                        
  9     pid_t id = fork();
 10     if(id < 0){
 11     perror("fork");
 12     return 1;
 13     }                                                 
 14     else if(id==0)                 
 15    {              
 16      printf("child[%d] is begin Z...\n", getpid());
 17       sleep(15);                     
 18                           
 19     }                                   
 20     else               
 21    {
 22      printf("parent[%d] is sleeping...\n", getpid());              
 23      sleep(5);                                                   
 24      exit(1);                                             
 25    }                                  
 26    return 0;                                             
 27   }     

结果:
Linux--进程状态与优先级,Linux,linux,服务器,运维

进程优先级

进程优先级是指操作系统为每个进程分配的执行优先级,用于控制和管理多任务环境中的进度调度。通过设置不同的优先级,可以决定哪些进程应该优先执行,从而影响系统的响应时间和吞吐量。

Linux--进程状态与优先级,Linux,linux,服务器,运维
Linux--进程状态与优先级,Linux,linux,服务器,运维文章来源地址https://www.toymoban.com/news/detail-791387.html

到了这里,关于Linux--进程状态与优先级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】关于进程的理解、状态、优先级和进程切换

    进程不同的状态本质都是在满足不同的运行场景的 1.运行队列 运行队列 进程如何在CPU上运行的:CPU在内核上维护了一个运行队列,进行进程的管理。让进程入队列,本质就是将该进程的task_struct 结构体对象放入运行队列之中。 2.运行状态 运行状态 进程PCB在运行队列里就是运

    2024年02月04日
    浏览(44)
  • 【Linux】Linux进程的理解 --- 冯诺依曼体系、进程描述符、状态、优先级、切换…

    如果不改变自己,就别把跨年搞的和分水岭一样,记住你今年是什么吊样,明年就还会是什么吊样!!! 1.冯诺依曼体系结构中的存储器指的是内存,带电存储,具有掉电易失的特点。 2.CPU中含有能够解释计算机指令的指令集,指令集又可分为精简指令集和复杂指令集,这也

    2024年01月25日
    浏览(51)
  • 【从浅学到熟知Linux】进程状态与进程优先级(含进程R/S/T/t/D/X/Z状态介绍、僵尸进程、孤儿进程、使用top及renice调整进程优先级)

    🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 操作系统进程状态概览(理论版),实际的一款操作系统进程状态与理论状态会有一定区别。↓↓↓ 新建状态 :字面意思,当进程刚创建时,就是新建状态。

    2024年04月18日
    浏览(47)
  • 2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

    Linux把所有进程通过双向链表的方式连接起来组成任务队列,操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 1.运行态:pcb结构体在运行或在运行队列中排队。 2.阻塞态:等待非cpu资源就绪(硬盘,网卡等资源) 3.挂起态:一个进程对应的代码和数据被操作系统因

    2024年01月22日
    浏览(45)
  • 【Linux进程篇-----进程优先级】

    1.基本概念 cpu 资源分配的先后顺序,就是指进程的优先权(priority) .优先权高的进程有优先执行权利。配置进程优先权对多任务环境的 Linux 很有用,可以改善系统性能。还可以把进程运行到指定的 CPU 上,这样一来,把不重要的进程安排到某个 CPU,可以大大改善系统整体性能

    2024年02月08日
    浏览(40)
  • Linux——进程优先级

    1.什么是优先级?         优先级和权限息息相关。权限的含义为能还是不能做这件事。而优先级则表示:你有权限去做,只不过是先去做还是后去做这件事罢了。 2.为什么会存在优先级?         优先级表明了狼多肉少的理念,举个例子:在日常生活中我们进行排队

    2024年02月06日
    浏览(52)
  • 【Linux】进程优先级

    Hello,大家好。本文我们要来介绍的是有关Linux下【进程优先级】,首先我们要了解的是其基本概念 在 Linux基础篇之权限 一文中我们有谈到过什么是权限,在Linux下有权限和无权限的区别在哪里。那现在的话我们就要来对比一下【权限】和【优先级】这两个概念 权限 : 表示

    2024年02月11日
    浏览(52)
  • 图解Linux进程优先级

    目录 1.什么是进程优先级? 2.进程优先级原理 3.查看进程优先级 4.修改进程优先级 4.1 setpriority函数原型 4.2 getpriority函数原型 4.3 sched_setscheduler函数原型 4.4 sched_getscheduler函数原型 4.5 sched_setparam函数原型 4.6 sched_getparam函数原型 Linux进程的优先级是用来确定在多个进程同时运行

    2024年02月05日
    浏览(51)
  • 【Linux】进程优先级 && 进程切换 && 环境变量

    目录 一、进程优先级  1、优先级概念  2、优先级特点  3、修改Linux下的优先级 二、进程切换  1、进程特性  2、进程切换 三、环境变量  1、基本概念  2、常见环境变量  3、查看环境变量方法  4、PATH环境变量  5、和环境变量相关的命令  6、环境变量的组织方式  7、通过

    2024年02月11日
    浏览(49)
  • 【Linux】进程周边003之进程优先级

      👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》 《数据结构》 《蓝桥杯试题》 《LeetCode刷题笔记》 《实训项目》 《C++》 《Linux》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.基本概念 2.PRI与NI 3.利用top命令更改已存在进程的nice值 4.通过renice命令更改进程

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包