【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状态。
- 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。