【IT专家】Linux中进程的几种状态
简述linux的几个运行级别及其相应的含义

简述linux的几个运行级别及其相应的含义Linux是一种开源的操作系统,它拥有多种不同的运行级别,每个运行级别都有特定的用途,以确保系统的正常运行。
这些运行级别统称为“系统模式”。
Linux操作系统中共有7个运行级别,简称“运行级别”,并且有以下相应含义:0:关机(Halt)状态:这是Linux操作系统停止所有服务和程序的最终不可逆过程,该状态下Linux操作系统的内核(Kernel)已停止运行,并且终端用户不能登陆系统,只能执行重启或者关机操作。
1:单用户模式(Single User Mode):这是Linux操作系统的最初启动模式,执行该模式后系统不会加载其他进程和服务,只启动Linux操作系统的内核和基本服务,只允许一个用户登陆系统,而任何系统更新工作均要在该状态下完成。
2:多用户模式(Multi-user Mode):这是Linux操作系统的标准运行模式,具有完整的多用户功能,允许多个用户同时登陆系统,系统将启动一定的守护进程,也就是Daemon进程。
3:网络多用户模式(Network Multi-user Mode):这是Linux 操作系统的普通多用户状态,该模式下Linux系统同时允许网络用户登陆系统,但是图形接口(X Window)不能用于登陆,即只有终端用户能够以这种方式登陆系统,获得访问控制权。
4:未使用(Unused):这是Linux操作系统为一个备用状态,为了给用户提供更多的选择,暂不使用。
5:图形多用户模式(Graphics Multi-user Mode):这是Linux操作系统的标准多用户模式,允许多个用户同时登陆系统,与网络多用户模式不同的是,该模式下,可以使用图形接口(X Window)登陆系统,获得访问控制权。
6:重新启动(Reboot):该模式将重新启动Linux操作系统,操作系统会自动启动和重新初始化,最终将进入多用户模式。
从上述7个运行级别中,我们可以看出,Linux操作系统的不同运行级别有着不同的功能,针对不同的实际需求,可以使用不同的运行级别,以确保系统的正常运行。
2 Linux进程状态

【2】Linux进程休眠和唤醒当进程以阻塞的方式通信,在得到结果前进程会挂起休眠。
为了将进程以一种安全的方式进入休眠,我们需要牢记两条规则:一、永远不要在原子上下文中进入休眠。
二、进程休眠后,对环境一无所知。
唤醒后,必须再次检查以确保我们等待的条件真正为真简单休眠完成唤醒任务的代码还必须能够找到我们的进程,这样才能唤醒休眠的进程。
需要维护一个称为等待队列的数据结构。
等待队列就是一个进程链表,其中包含了等待某个特定事件的所有进程。
linux维护一个“等待队列头”来管理,wait_queue_head_t,定义在<linux/wait.h>struct __wait_queue_head {wq_lock_t lock;struct list_head task_list;};typedef struct __wait_queue_head wait_queue_head_t;初始化方法:静态方法:DECLARE_WAIT_QUEUE_HEAD(name)动态方法:wait_queue_head_t my_queue;init_waitqueue_head(&my_queue);linux中最简单的休眠方式是下面的宏,wait_event(queue, condition) /*进程将被置于非中断休眠(uninterruptible sleep)*/wait_event_interruptible(queue, condition) /*进程可被信号中断休眠,返回非0值表示休眠被信号中断*/wait_event_timeout(queue, condition, timeout) /*等待限定时间jiffy,condition满足其一返回0*/wait_event_interruptible_timeout(queue, condition, timeout)queue是等待队列头,传值方式condition是任意一个布尔表达式,在休眠前后多次对condition求值,为真则唤醒唤醒进程的基本函数是wake_upvoid wake_up(wait_queue_head_t *queue); /*唤醒等待在给定queue上的所有进程*/void wake_up_interruptible(wait_queue_head_t *queue);实践中,一般是wait_event和wake_up,wait_event_interruptible和wake_up_interruptible 成对使用高级休眠将进程置于休眠的步骤:(1)分配和初始化一个wait_queue_t 结构,随后将其添加到正确的等待队列struct __wait_queue { unsigned int flags;#define WQ_FLAG_EXCLUSIVE 0x01 void *private; wait_queue_func_t func; struct list_head task_list;};typedef struct __wait_queue wait_queue_t;(2)设置进程状态,标记为休眠。
Linux进程编程介绍-进程

Linux进程编程介绍-进程进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。
了解进程的本质,对于理解、描述和设计操作系统有着极为重要的意义。
了解进程的活动、状态,也有利于编制复杂程序。
1.进程的基本概念首先我们先看看进程的定义,进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。
进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。
了解进程的本质,对于理解、描述和设计操作系统有着极为重要的意义。
了解进程的活动、状态,也有利于编制复杂程序。
1.1 进程状态和状态转换现在我们来看看,进程在生存周期中的各种状态及状态的转换。
下面是LINUX系统的进程状态模型的各种状态:用户状态:进程在用户状态下运行的状态。
内核状态:进程在内核状态下运行的状态。
内存中就绪:进程没有执行,但处于就绪状态,只要内核调度它,就可以执行。
内存中睡眠:进程正在睡眠并且进程存储在内存中,没有被交换到SWAP设备。
就绪且换出:进程处于就绪状态,但是必须把它换入内存,内核才能再次调度它进行运行。
睡眠且换出:进程正在睡眠,且被换出内存。
被抢先:进程从内核状态返回用户状态时,内核抢先于它,做了上下文切换,调度了另一个进程。
原先这个进程就处于被抢先状态。
创建状态:进程刚被创建。
该进程存在,但既不是就绪状态,也不是睡眠状态。
这个状态是除了进程0以外的所有进程的最初状态。
僵死状态(zombie):进程调用exit结束,进程不再存在,但在进程表项中仍有纪录,该纪录可由父进程收集。
现在我们从进程的创建到退出来看看进程的状态转化。
需要说明的是,进程在它的生命周期里并不一定要经历所有的状态。
首先父进程通过系统调用fork来创建子进程,调用fork时,子进程首先处于创建态,fork调用为子进程配置好内核数据结构和子进程私有数据结构后,子进程就要进入就绪态3或5,即在内存中就绪,或者因为内存不够,而导致在SWAP设备中就绪。
Linux三种进程类型

Linux三种进程类型
Linux操作系统包括三种不同类型的进程,每种进程都有⾃⼰的特点和属性。
1. 交互进程是由⼀个Shell启动的进程。
交互进程既可以在前台运⾏,也可以在后台运⾏。
2. 批处理进程和终端没有联系,是⼀个进程序列。
3. 监控进程(也称系统守护进程)是Linux系统启动时运⾏的进程,并常驻后台。
例如,httpd是著名的Apache服务器的监控进程。
init是Linux系统操作中不可缺少的程序之⼀。
所谓的init进程,它是⼀个由内核启动的⽤户级进程。
内核⾃⾏启动(已经被载⼊内存,开始运⾏,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动⼀个⽤户级程序init的⽅式,完成引导进程。
所以,init始终是第⼀个进程(其进程编号始终为1)。
其它所有进程都是init进程的⼦孙。
init进程是不可杀的(即不能通过kill 命令杀掉进程)!。
头歌进程描述与状态

头歌进程描述与状态一、进程标识每个进程都有一个唯一的标识,称为进程ID(PID)。
它是操作系统分配给每个进程的唯一代码,用于在系统内唯一标识该进程。
二、父进程标识每个进程都有一个父进程,父进程负责创建并启动子进程。
父进程的标识称为父进程ID(PPID)。
它标识了创建当前进程的父进程。
三、进程状态进程状态表示进程的当前运行状态,常见的进程状态有:1.运行状态(Running):进程正在运行或在运行队列中等待运行。
2.阻塞状态(Blocked):进程在等待某个事件(如I/O操作)完成而暂时停止运行。
3.就绪状态(Ready):进程已经准备好运行,但因为其他进程正在运行而暂时无法获得CPU。
4.终止状态(Terminated):进程已经结束运行。
四、进程优先级进程优先级是操作系统用于决定哪个进程先获得CPU资源的依据。
优先级高的进程更容易获得CPU资源。
五、CPU使用时间CPU使用时间表示进程在运行过程中占用的CPU时间总和。
它可以帮助我们了解进程的资源占用情况和性能表现。
六、内存使用情况内存使用情况表示进程在运行过程中占用的内存空间大小,包括代码、数据和堆栈等区域。
了解内存使用情况可以帮助我们优化程序或调整系统资源分配。
七、进程通信信息进程通信信息表示进程之间的通信方式和数据交换情况。
这涉及到信号传递、管道通信、共享内存等机制。
八、打开文件描述符列表打开文件描述符列表表示进程当前打开的所有文件和网络连接等信息。
这些文件描述符用于进程与外部资源交互。
九、进程间关系进程间关系表示进程之间的父子关系、同步关系等。
了解这些关系有助于更好地理解进程的运行情况和系统资源的使用情况。
简述linux的几个运行级别及其相应的含义。

简述linux的几个运行级别及其相应的含义。
Linux操作系统中有七个运行级别,每个运行级别都有不同的含义和对应的服务和进程状态。
这些运行级别分别是:
1. 单用户模式:这是Linux的一种维护模式,用于执行系统维护任务,如升级、备份或恢复等。
在此模式下,只有系统管理员可以访问系统,其他用户无法登录。
2. 多用户模式:这是一种常见的运行级别,用于日常使用和办公。
在此模式下,可以通过命令行或图形界面登录,但不会启动桌面环境。
该模式允许用户在命令行界面上使用Linux系统。
3. X11模式:这是一种常用的图形界面模式,用于日常办公和图形界面操作。
在此模式下,会启动桌面环境,用户可以通过图形界面进行文件管理、软件安装和上网等操作。
4. 多用户加X11模式:这是一种带图形界面的多用户模式,用于日常使用和办公。
在此模式下,可以登录到带桌面环境的系统,用户可以通过图形界面进行文件管理、软件安装和上网等操作。
5. 文本模式:这是一种特殊的运行级别,用于在无法使用图形界面时进行操作。
在此模式下,只会启动基本的文本界面,用户可以通过命令行进行文件管理、软件安装和上网等操作。
6. 救援模式:这是一种特殊的运行级别,用于修复系统损坏或崩溃的情况。
在此模式下,可以启动救援光盘,并使用一些修复工具来恢复系统。
7. 内存诊断模式:这是一种特殊的运行级别,用于检测系统内存是否存在问题。
在此模式下,可以运行内存诊断工具来检测内存问题,以便及时修复系统的问题。
每个运行级别都有其特定的用途和相应的服务状态,可以根据实际需求来选择合适的运行级别。
进程的三个基本状态及其转换

进程的三个基本状态及其转换
进程的三个基本状态是运行态、阻塞态和就绪态。
这些状态之间的转换有以下几种情况:
1. 就绪态转为运行态:当一个进程被调度器选中,分配到CPU进行执行时,就会从就绪态转为运行态。
2. 运行态转为就绪态:当一个进程在运行时被抢占,或者执行完毕后释放CPU,进入等待调度的状态时,就会从运行态转为就绪态。
3. 运行态转为阻塞态:当一个进程在执行过程中发生某些不可避免的等待事件(如等待用户输入、等待IO操作完成)时,就会从运行态转为阻塞态。
4. 阻塞态转为就绪态:当一个进程等待事件结束后,切换到就绪状态,等待被调度执行时,就会从阻塞态转为就绪态。
5. 阻塞态转为终止态:当一个进程的等待事件永远结束(如等待关闭的设备),或者因为某些异常事件(如访问非法内存)而引发错误,无法继续执行时,就会从阻塞态转为终止态。
以上是进程的基本状态及其转换,不同的操作系统可能会有些差异,但一般都会包括这些状态和转换。
进程的7种状态,僵尸进程与孤儿进程

进程的7种状态,僵⼫进程与孤⼉进程⼀.进程的七种状态1.七种状态如下:①R(运⾏状态)(这个状态并不是说明当前进程在CPU⾥运⾏,⽽是说当前进程处理运⾏队列⾥)②S(浅度睡眠状态)③D(深度睡眠状态)(不能被终⽌)④T(停⽌状态)⑤t (追踪状态)⑥X(死亡状态)⑦Z(僵⼫状态)注意:状态后⾯带+表⽰前台进程,不带+表⽰后台进程(前台进程:当前只能有⼀个进程做事;后台进程:当前可以有很多进程做事)2.如何修改进程的状态?①⾸先创建⼀个进程,并让其变成⼀个后台进程(后⾯加上⼀个&)。
②我们可以看到test进程的pid为1785,状态为R(下⾯还有⼀个进程是执⾏查询进程信息时创建的进程grep)。
③将test进程的状态由R变为T(停⽌)状态。
⾸先通过kill -l查询这些信号处理列表。
可以发现19号信号(SIGSTOP)是停⽌进程的信号。
执⾏19号信号:(kill -19 1785)注意必须在19前⾯加上-(也可以将19换为信号名,如可以写kill -SIGSTOP 1785)④如果想让刚刚停⽌的进程继续执⾏,则可以⽤kill -18 1785⼆.僵⼫进程1.什么叫僵⼫进程?当⼀个⼦进程退出后,其⽗进程还在继续执⾏,⼦进程的退出信息并没有被⽗进程接收到,但是⼀个进程的退出信息必须被⽗进程或⼀些有联系的进程接收到,所以当前进程会⼀直处于僵死状态。
2.为什么⼦进程的退出信息要被接收到呢?因为⼀个进程的退出⽅式有三种(程序执⾏完结果正确即正常退出,程序执⾏完结果不正确,程序还没有执⾏完),⽗进程必须要知道⼦进程到底是以何种状态退出的,如果⼦进程不是正常退出,则⽗进程还要创建⼦进程执⾏这件事。
3.处于僵⼫状态的进程会⼀直等待其⽗进程读取其退出信息。
4.所以,只要⼦进程退出,⽽⽗进程还在执⾏,但⽗进程没有读取⼦进程的状态信息,则⼦进程会变成⼀个僵⼫进程。
5.创建⼀个僵⼫进程(只要让⼦进程先退出,⽗进程⼀直执⾏)例如可以编写⼀个程序,前5秒该程序会让⽗⼦进程同时运⾏,5秒之后只有⽗进程在⼀直运⾏,所以我们可以知道5秒后⼦进程的状态会变为Z状态。
linux cpu运行2种状态

1.操作系统需要两种CPU状态内核态(Kernel Mode):运行操作系统程序,操作硬件用户态(User Mode):运行用户程序2.指令划分特权指令:只能由操作系统使用、用户程序不能使用的指令。
举例:启动I/O 内存清零修改程序状态字设置时钟允许/禁止终端停机非特权指令:用户程序可以使用的指令。
举例:控制转移算数运算取数指令访管指令(使用户程序从用户态陷入内核态)3.特权级别特权环:R0、R1、R2和R3R0相当于内核态,R3相当于用户态;不同级别能够运行不同的指令集合;4.CPU状态之间的转换用户态--->内核态:唯一途径是通过中断、异常、陷入机制(访管指令)内核态--->用户态:设置程序状态字PSW5.内核态与用户态的区别内核态与用户态是操作系统的两种运行级别,当程序运行在3级特权级上时,就可以称之为运行在用户态。
因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;当程序运行在0级特权级上时,就可以称之为运行在内核态。
运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。
当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。
这两种状态的主要差别是◆处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的◆处于内核态执行时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的。
6. 通常来说,以下三种情况会导致用户态到内核态的切换◆系统调用这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。
比如前例中fork()实际上就是执行了一个创建新进程的系统调用。
而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
进程的基本状态及转换原因

进程的基本状态及转换原因1. 任务名称解析任务名称为”进程的基本状态及转换原因”,从中可以得知该任务要求我们详细介绍进程的基本状态以及导致进程状态转换的原因。
2. 进程的基本状态在操作系统中,进程被定义为正在执行的程序实例。
进程可以处于以下几种基本状态:2.1 创建(Creation)状态当一个程序被启动时,一个新的进程就会被创建。
此时操作系统会为该进程分配必要的资源,并将其标记为创建态。
在这个阶段,操作系统会为进程分配唯一标识符(PID)和内存空间等资源。
2.2 就绪(Ready)状态一旦进程被创建并获得了所需的资源,它就会处于就绪态。
在就绪态下,进程已经准备好运行,但由于操作系统采用时间片轮转调度算法等方式进行多任务处理,所以可能还没有获得CPU时间片来执行。
2.3 运行(Running)状态当一个进程获得了CPU时间片并开始执行时,它就处于运行态。
在这个阶段,进程会按照程序指令进行计算、处理数据等操作。
2.4 阻塞(Blocked)状态在进程执行过程中,可能会发生一些需要等待的事件,比如等待用户输入、等待某个资源的释放等。
当进程遇到这些事件时,它就会从运行态转换为阻塞态,并将CPU让给其他进程。
一旦所需的事件发生并得到满足,进程就可以从阻塞态转换回就绪态。
2.5 结束(Terminated)状态当一个进程完成了它的任务或被强制终止时,它就会进入结束态。
在结束态下,操作系统会回收该进程所占用的资源,并将其标记为已结束。
3. 进程状态转换原因进程在不同状态之间进行转换是由于以下几种原因:3.1 创建状态到就绪状态的转换原因当一个程序被启动时,操作系统会为该程序创建一个新的进程,并为其分配必要的资源。
一旦资源准备完毕,该进程就可以开始执行,并处于就绪状态等待CPU时间片。
3.2 就绪状态到运行状态的转换原因当一个进程处于就绪状态时,如果操作系统选择了它来执行,并为其分配了CPU时间片,该进程就会从就绪态转换为运行态。
知识点41 进程及进程状态

进程及进程状态
在多道程序工作环境中,各个程序是并发执行的,它们共享系统资源,共同决定这些资源的状态。
彼此间相互制约、相互依赖,因而呈现出并发、动态及相互制约等新的特征。
这样,用程序这个静态概念已不能如实反映程序活动的这些特征。
为此,人们引进了进程(process)这一概念,来描述程序动态执行的特性。
简单地说,进程就是程序的一次执行动态子过程。
一个静态的程序可以分解为若干个动态子过程,每个子过程的执行就相当于一个进程的执行。
在Linux系统中,进程有以下几个状态:
运行态(run):此时进程正在运行或准备运行
等待态(wait):此时进程在等待一个事件的发生或某种系统资源。
停止态(stop):进程被停止,通常是通过接受一个信号。
正在被调试的进程可能处于停止状态。
僵死态(zombie):由于某些原因被终止的进程,但是该进程的控制结构仍然保留着。
Linux0号进程,1号进程,2号进程

Linux0号进程,1号进程,2号进程 本节我们将从linux启动的第⼀个进程说起,以及后⾯第⼀个进程是如何启动1号进程,然后启动2号进程。
然后系统中所有的进程关系图做个简单的介绍⼀、0号进程 0号进程,通常也被称为idle进程,或者也称为swapper进程。
0号进程是linux启动的第⼀个进程,它的task_struct的comm字段为"swapper",所以也称为swpper进程。
1#define INIT_TASK_COMM "swapper" 当系统中所有的进程起来后,0号进程也就蜕化为idle进程,当⼀个core上没有任务可运⾏时就会去运⾏idle进程。
⼀旦运⾏idle进程则此core就可以进⼊低功耗模式了,在ARM上就是WFI。
我们本节重点关注是0号进程是如何启动的。
在linux内核中为0号进程专门定义了⼀个静态的task_struct的结构,称为init_task。
1/*2 * Set up the first task table, touch at your own risk!. Base=0,3 * limit=0x1fffff (=2MB)4*/5struct task_struct init_task6 = {7 #ifdef CONFIG_THREAD_INFO_IN_TASK8 .thread_info = INIT_THREAD_INFO(init_task),9 .stack_refcount = ATOMIC_INIT(1),10#endif11 .state = 0,12 .stack = init_stack,13 .usage = ATOMIC_INIT(2),14 .flags = PF_KTHREAD,15 .prio = MAX_PRIO - 20,16 .static_prio = MAX_PRIO - 20,17 .normal_prio = MAX_PRIO - 20,18 .policy = SCHED_NORMAL,19 .cpus_allowed = CPU_MASK_ALL,20 .nr_cpus_allowed= NR_CPUS,21 .mm = NULL,22 .active_mm = &init_mm,23 .tasks = LIST_HEAD_INIT(init_task.tasks),24 .ptraced = LIST_HEAD_INIT(init_task.ptraced),25 .ptrace_entry = LIST_HEAD_INIT(init_task.ptrace_entry),26 .real_parent = &init_task,27 .parent = &init_task,28 .children = LIST_HEAD_INIT(init_task.children),29 .sibling = LIST_HEAD_INIT(init_task.sibling),30 .group_leader = &init_task,31 RCU_POINTER_INITIALIZER(real_cred, &init_cred),32 RCU_POINTER_INITIALIZER(cred, &init_cred),33 .comm = INIT_TASK_COMM,34 .thread = INIT_THREAD,35 .fs = &init_fs,36 .files = &init_files,37 .signal = &init_signals,38 .sighand = &init_sighand,39 .blocked = {{0}},40 .alloc_lock = __SPIN_LOCK_UNLOCKED(init_task.alloc_lock),41 .journal_info = NULL,42 INIT_CPU_TIMERS(init_task)43 .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(init_task.pi_lock),44 .timer_slack_ns = 50000, /* 50 usec default slack */45 .thread_pid = &init_struct_pid,46 .thread_group = LIST_HEAD_INIT(init_task.thread_group),47 .thread_node = LIST_HEAD_INIT(init_signals.thread_head),48 };49 EXPORT_SYMBOL(init_task); 这个结构体中的成员都是静态定义了,为了简单说明,对这个结构做了简单的删减。
Linux 进程详解

Linux 一个非常重要的概念就是进程,Linux 进程和我们在之前探讨的进程模型非常相似。
每个进程都会运行一段独立的程序,并且在初始化的时候拥有一个独立的控制线程。
换句话说,每个进程都会有一个自己的程序计数器,这个程序计数器用来记录下一个需要被执行的指令。
Linux 允许进程在运行时创建额外的线程。
Linux 是一个多道程序设计系统,因此系统中存在彼此相互独立的进程同时运行。
此外,每个用户都会同时有几个活动的进程。
因为如果是一个大型系统,可能有数百上千的进程在同时运行。
在某些用户空间中,即使用户退出登录,仍然会有一些后台进程在运行,这些进程被称为守护进程(daemon)。
Linux 中有一种特殊的守护进程被称为计划守护进程(Cron daemon),计划守护进程可以每分钟醒来一次检查是否有工作要做,做完会继续回到睡眠状态等待下一次唤醒。
Cron 是一个守护程序,可以做任何你想做的事情,比如说你可以定期进行系统维护、定期进行系统备份等。
在其他操作系统上也有类似的程序,比如Mac OS X 上 Cron 守护程序被称为launchd的守护进程。
在 Windows 上可以被称为计划任务(Task Scheduler)。
在 Linux 系统中,进程通过非常简单的方式来创建,fork系统调用会创建一个源进程的拷贝(副本)。
调用 fork 函数的进程被称为父进程(parent process),使用 fork 函数创建出来的进程被称为子进程(child process)。
父进程和子进程都有自己的内存映像。
如果在子进程创建出来后,父进程修改了一些变量等,那么子进程是看不到这些变化的,也就是 fork 后,父进程和子进程相互独立。
虽然父进程和子进程保持相互独立,但是它们却能够共享相同的文件,如果在 fork 之前,父进程已经打开了某个文件,那么 fork 后,父进程和子进程仍然共享这个打开的文件。
对共享文件的修改会对父进程和子进程同时可见。
进程的三种状态

进程的三种状态
进程的状态有:运⾏态,就绪台,阻塞态。
如下图⽰:
注意区别就绪状态和等待状态:就绪状态是指进程仅缺少cpu,只要获得cpu资源就⽴即执⾏;⽽等待状态是指进程需要其他资源(除了cpu)或等待某⼀事件。
⽤户态和核⼼态的区别。
当⼀个任务(进程)执⾏系统调⽤⽽陷⼊内核代码中执⾏时,我们就称进程处于内核运⾏态(或简称为内核态)。
此时处理器处于特权级最⾼的(0级)内核代码中执⾏。
当进程处于内核态时,执⾏的内核代码会使⽤当前进程的内核栈。
每个进程都有⾃⼰的内核栈。
当进程在执⾏⽤户⾃⼰的代码时,则称其处于⽤户运⾏态(⽤户态)。
即此时处理器在特权级最低的(3级)⽤户代码中运⾏。
当正在执⾏⽤户程序⽽突然被中断程序中断时,此时⽤户程序也可以象征性地称为处于进程的内核态。
因为中断处理程序将使⽤当前进程的内核栈。
这与处于内核态的进程的状态有些类似。
⽤户态切换到内核态的3种⽅式:系统调⽤、异常、外围设备中断。
进程有哪几种状态?

进程有哪⼏种状态?
创建:进程正在被创建,尚未转到就绪状态。
就绪状态:进程已经处于准备运⾏状态,即进程获得了除处理器⼀切的所需资源,⼀旦得到处理器即可运⾏。
运⾏状态:进程正在处理器上运⾏。
在单处理器环境下,每⼀个时刻最多只有⼀个进程处于运⾏状态。
阻塞状态:进程正在等待某⼀时间⽽暂停运⾏,如等待某资源为可⽤(不包括处理器)或等待输⼊、输出完成。
即处理器空闲,该进程也不能运⾏。
结束状态:进程正从系统消失,可能是进程正常结束或者其他原因中断退出运⾏。
可以想象成排队就餐的情况。
Linux操作系统的进程的详细介绍

Linux操作系统的进程的详细介绍Linux操作系统难免会碰到进程的相关问题,下面由小编为大家整理了Linux操作系统的进程的详细介绍的相关知识,希望对大家有帮助!Linux操作系统的进程的详细介绍:一、进程概述我们平时写的C 语言代码,通过编译器编译,最终它会成为一个可执行程序,当这个可执行程序运行起来后(没有结束之前),它就成为了一个进程。
程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。
进程的状态是变化的,其包括进程的创建、调度和消亡。
程序是静态的,进程是动态的。
在Linux 系统中,操作系统是通过进程去完成一个一个的任务,进程是管理事务的基本单元。
进程拥有自己独立的处理环境(如:当前需要用到哪些环境变量,程序运行的目录在哪,当前是哪个用户在运行此程序等)和系统资源(如:处理器CPU 占用率、存储器、I/O设备、数据、程序)。
我们可以这么理解,公司相当于操作系统,部门相当于进程,公司通过部门来管理(系统通过进程管理),对于各个部门,每个部门有各自的资源,如人员、电脑设备、打印机等。
Linux操作系统的进程的详细介绍:二、进程状态我们现在的电脑基本上都是多任务,我们聊着QQ 的时候,同时可以看着视频,这里相当于QQ 和视频两个程序同时运行着(两个进程)。
早期的时候,电脑的CPU 是单核的(单核理论上只运行操作一个任务),那它是如何做到多任务的呢?这就涉及到进程的调度策略。
现在给大家举这么一个例子,有A,B,C 三个进程,在我们单CPU 的情况下,每一个时刻只有一个进程在运行,如果A 运行完,B 运行,B 运行完,C 运行,C 运行完,A 运行,而CPU 的运算速度足够快,A 两次运行时间间隔足够短,从宏观上就我们就看到A,B,C 好像同时运行,这就是实现单CPU 运行多个任务的核心原理,通过时间片轮询调度策略实现多任务(更多详情,请看《Linux 进程调度浅析》)。
从上面的例子,我们可以得知,对于A 进程而言,有时候在运行,有时候没有运行,两个状态不一样,所以,进程是有状态的,同时,状态是可以相互进行转换的,从执行的状态转换为不执行的状态,这里,我们可以把进程运行的整个生命周期简单划分为三种状态(实际上不指这三种状态):就绪态、执行态、等待态。
Linux下进程的状态

Linux下进程的各种状态D Uninterruptible sleep (usually IO)不可中断的深度睡眠,一般由IO引起,同步IO在做读或写操作时,此进程不能做其它事情,只能等待,这时进程处于这种状态,如果程序采用异步IO,这种状态应该就很少见到了R Running or runnable (on run queue)进程处于运行或就绪状态S Interruptible sleep (waiting for an event to com plete)可接收信号的睡眠状态,sleep函数可演示这种状态T Stopped, either by a job control signal or because it is being traced.被ctrl+z中断或被traceW paging (not valid since the 2.6.xx kernel)X dead (should never be seen)进程已经完全死掉,不可能看见这种状态的Z Defunct ("zombie") process, term inated but not reaped by its parent.进程已经终止,但是其父进程没有来及处理它,多进程写不好的话,这种状态是常见的For BSD formats and when the stat keyword is used, additional characters m a ybe displayed:< high-priority (not nice to other users)N low-priority (nice to other users)L has pages locked into m emory (for real-tim e and custom IO)s is a session leaderl is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ is in the foreground process group关于D和Z一段有趣的解释:有一类垃圾却并非这么容易打扫,那就是我们常见的状态为 D (Uninterruptible sleep) ,以及状态为Z (Zombie) 的垃圾进程。
关于进程三态(运行态、就绪态、阻塞态)的一些易混知识点

关于进程三态(运⾏态、就绪态、阻塞态)的⼀些易混知识点⼀、导致进程变成阻塞态的事件
1. 等待资源(临界资源、临界区)
2. 信息交换(I/O输⼊输出、读写内存)
3. 进程同步(停下来等待其他进程)
⼆、导致进程变成就绪态的事件
1. 阻塞的进程获得等待的资源或信号(阻塞态 ---> 就绪态)
2. 时间⽚轮转的情况下,进程的时间⽚⽤完了(运⾏态 ---> 就绪态)
3. CPU调度给优先级更⾼的进程(运⾏态 ---> 就绪态)
三、“阻塞态”⼜叫“等待态”、“封锁态”
四、就绪态和阻塞态的本质区别
阻塞态:进程停⽌,缺必要的资源,给CPU调度机会也不能运⾏
就绪态:进程停⽌,资源都不缺,就缺CPU调度,给CPU调度就能运⾏
运⾏态:什么都不缺,正在运⾏的进程。
简述linux的几个运行级别及其相应的含义

简述linux的几个运行级别及其相应的含义
Linux系统的运行级别是代表操作系统完成不同任务的不同状态。
它集中在Linux内核的运行原理上,使操作系统可以完成不同的任务。
Linux的运行级别提供了一种有效的方法来控制在某些情况下系统的行为。
它也可以从不同的外部视角来进行管理,以确保系统的性能和安全。
Linux支持共有7种运行级别,包括0-6级。
它们提供各种不同的功能,以满足复杂的系统任务。
0级是关机状态。
如果你的系统中的进程出现问题,或者你需要完全关闭系统,你可以使用0级别。
1级是单用户模式,仅启动基本服务。
此时,只有一个用户可以登录系统。
2级是多用户模式,仅启动基本服务且允许多用户登录。
3级是服务器模式,仅启动网络服务,但不支持图形界面。
4级是其它服务模式,预留给特殊的服务或者启动自定义的服务。
5级是图形界面模式,启动图形界面以及完整的网络服务。
6级是重启模式,它会清空缓存,重启系统,重新启动所有进程。
通过改变Linux的运行级别,可以使操作系统更有效地执行任务。
此外,用户可以在不同运行级别下执行不同的操作,以确保系统安全。
例如,可以在单用户模式下安装软件,这样可以避免多用户造成的安装冲突。
通常情况下,Linux系统会在开机时自动以最高安全级别运行。
如果用户需要降低运行级别,可以使用runlevel命令或者telinit 命令来更改运行级别。
因此,Linux操作系统支持有7种不同的运行级别,它们提供不同的功能,可以被用户按照需求改变,以确保系统的性能和安全。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Linux中进程的几种状态
2015/03/29 4411 1R (task_running) :可执行状态
只有在该状态的进程才可能在CPU上运行。
而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。
进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。
很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在linux下统一为TASK_RUNNING状态。
2S (task_interruptible):可中断的睡眠状态
处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。
这些进程的task_struct结构被放入对应事件的等待队列中。
当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。
通过ps命令我们会看到,一般情况下,进程列表中的绝大多数进程都处于task_interruptible状态(除非机器的负载很高)。
毕竟CPU就这么一两个,进程动辄几十上百个,如果不是绝大多数进程都在睡眠,CPU又怎么响应得过来。
3D (task_uninterrupible)不可中断的睡眠状态
与task_interruptible状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。
不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。
绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。
但是uninterruptible sleep状态的进程不接受外来的任何信号,因此无法用kill杀掉这些处于D状态的进程,无论是”kill”, “kill -9″还是”kill -15″,这种情况下,一个可选的方法就是reboot。