在Linux系统中所有运行的任务都是进程,更加准确的说,每个用户任务,每个系统管理,都可以说是一个进程, 那么进程都有那些属性呢?下面良许教程网为大家讲解一下Linux系统中进程属性。
1. 进程的四要素
-
有一段程序代码供该程序运行。
-
拥有专用的系统堆栈空间。
-
拥有一个 task_struck 结构来实现进程控制块(pcb)。
-
拥有独立的存储空间。
2. 进程的关系和分类
Linux 系统中的所有进程都是相互联系的。
Linux 内核创建了进程标号为 0 和进程标号为 1 的进程,进程标号为 1 的进程是一个初始化进程 init,Linux 中的所有进程都是由其衍生而来的,在 Shell 下执行程序启动的进程则是 Shell 进程的子进程,在用户的启动进程中可以再启动自己的子进程,这样就形成了一棵进程树,每个进程都是树中的一个节点,树的根是初始化进程 init。进程之间的关系可以用图中的亲属关系来描述,通常包括以下几个部分。
-
p_opptr(祖先,original parent): 指向创建进程 P 的进程描述符,如果父进程不存在,则指向进程 init 的描述符。当一个 Shell 用户启动一个后台进程并从 Shell 退出时,后台进程将变成 init 的子进程。
-
p_ pptr(父进程,parent): 指向进程的父进程,值通常来说和 p_ opptr 一致,也可能不同。
-
p_ cptr (子进程,child): 指向进程年龄最小的子进程的描述符,即进程上一次创建的进程描述符。
-
p_ ysptr(弟进程,younger sibling): 指向在本进程创建之后由父进程创建的进程。
-
p_ osptr(兄进程,older sibling):指向在本进程创建之前由父进程创建的进程。
3. 进程的类型
Linux 操作系统通常包括三种不同类型的进程。
-
交互进程:由一个 Shell 启动的进程,既可以在前台运行,也可以在后台运行。
-
批处理进程:和终端没有联系,是一个进程序列。
-
守护进程:Linux 系统启动时启动的进程,并在后台运行。
4. 进程的状态
进程在其生存周期内可能处于以下状态中,这些状态是互斥的,在 task_struct 结构的状态域中使用不同关键字来定义这些状态。
-
可运行状态(TASK_RUNNING):占用处理器执行或者准备执行。
-
可中断的等待状态(TASK_INTERRUPTIBLE):进程被挂起或者睡眠,当某些条件变成真的时候退出这种等待状态,比如:硬件中断、进程正在等待的系统资源被释放、传递一个信号等,退出等待状态之后的进程会回到 TASK_RUNNING 状态。
-
不可中断的等待状态(TASK_ UNINTERRUPTIBLE):和可中断的等待状态类似,其差别是当接收到信号时并不能退出这个等待状态。
-
暂停状态(TASK_STOPPING): 进程的执行被暂停,通常来说当进程接收到 SIGSTOP、SIGTTIN 或者 SIGTTOU 信号后,进入暂停状态。如果一个进程被另外一个进程监控时,任何信号都可以把这个进程置于 TASK_STOPPEN 状态。
-
僵尸状态(TASK_ZOMBIE):进程的执行已经被终止,但是父进程还没有使用 wait 调用已返回的相应信息,此时内核不能丢弃包含在该进程中的相应数据,因为父进程还可能需要这些数据。
进程在这几种状态之间相互转化,但对于用户而言是透明的,这个切换的过程也常常被称为进程的调度。
进程是一个随执行过程不断变化的实体,进程也包含程序计数器和所有处理器寄存器的值,同时它的堆栈中存储着(如子程序)参数、返回地址以及变量之类的临时数据。当前的执行程序,或者说进程,包含着当前处理器中的活动状态。在多处理操作系统中,进程具有独立的权限与职责。如果系统中某个进程崩溃,不会影响到其余的进程。每个进程运行在各自的虚拟地址空间中,通过一定的通信机制,它们之间才能发生联系。
以上就是为各位朋友分享的相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多等着你!