进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE
摘要:本文主要介绍进程资源和进程状态.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.进程状态,就绪/执行状态、等待状态(能够被中断打断)、等待状态(不能够被中断打断)、停止状态和僵死状态.
1.进程资源
进程是Linux系统下资源管理的基本单位。每一个进程都有自己的独立的执行空间.为了更好的管理Linux所訪问的资源。系统引入了进程控制(PCB)的概念。PCB结构体.
进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.
内核空间进程资源:指的就是PCB相关信息.包含进程控制块本身、打开的文件表项、当前文件夹、当前终端信息、线程基本信息、可訪问内存地址、PID、PPID、UID、EUID等,也就是说内核通过PCB能够訪问到进程全部的资源.这些资源仅仅能通过系统调用才干訪问到.进程退出后,资源由还有一进程来回收.
用户空间进程资源:通过成员mm_struct映射的内存空间.实质就是进程的代码段、数据段、堆、栈、以及能够共享訪问的库的内存空间.这些资源进程能够直接訪问.在进程退出时主动释放.在进程执行时,能够通过文件 /proc/{pid}/maps来产看能够訪问的地址空间.
2.进程状态
人生三大错觉之中的一个:QQ、暴风影音、浏览器等能够一起执行。难道进程是并行执行的.非也非也.对于单CPU系统来说在某一时刻,仅仅能有一个进程处于执行状态,占有CPU的使用权,其它进程都处于其它状态,等待系统资源,各进程依据调度算法在某些状态之间不停地的切换.但因为CPU处理效率较快,使用户感觉不到当中的变化.
在Linux2.6内核中。用户级进程拥有下面几种状态:就绪/执行状态、等待状态(能够被中断打断)、等待状态(不能够被中断打断)、停止状态和僵死状态.
TASK_RUNNING:正在运行或处于就绪状态:就绪状态是指进程申请到了CPU以外的其它全部资源。正所谓:万事俱备,仅仅欠东风.提醒:一般的操作系统教科书将正在CPU上运行的进程定义为RUNNING状态、而将可运行可是尚未被调度运行的进程定义为READY状态。这两种状态在Linux下统一为 TASK_RUNNING状态.
TASK_INTERRUPTIBLE:处于等待队伍中,等待资源有效时唤醒(比方等待键盘输入、socket连接、信号等等),但能够被中断唤醒.普通情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态.毕竟皇帝仅仅有一个(单个CPU时),后宫佳丽几千;假设不是绝大多数进程都在睡眠,CPU又怎么响应得过来.
TASK_UNINTERRUPTIBLE:处于等待队伍中,等待资源有效时唤醒(比方等待键盘输入、socket连接、信号等等),但不能够被中断唤醒.
TASK_ZOMBIE:僵死状态。进程资源用户空间被释放,但内核中的进程PCB并没有释放。等待父进程回收.
TASK_STOPPED:进程被外部程序暂停(如收到SIGSTOP信号,进程会进入到TASK_STOPPED状态),当再次同意时继续运行(进程收到SIGCONT信号,进入TASK_RUNNING状态)。因此处于这一状态的进程能够被唤醒.
用户级进程之间的状态切换关系如图2所看到的.
笔者:个人能力有限,仅仅是学习參考...读者若发现文中错误。敬请提出.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------勿在浮沙筑高台,静下心来。慢慢地沉淀---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE的更多相关文章
- [进程管理]Linux进程状态解析之T、Z、X
Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态. 向进程发送一个SIGSTOP信号,它就会因响应该信号而进入 ...
- [进程管理]Linux进程状态解析之R、S、D
Linux是一个分时操作系统,能够在一个cpu上运行多个程序,每个被运行的程序实例对应一个或多个进程,这里介绍一下Linux进程状态. Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个 ...
- [转]使用 Shell 对进程资源进行监控
原文:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-monitoring/ 使用 Shell 对进程资源进行监控 检查进程是否存在 在 对 ...
- 二十一、Linux 进程与信号---进程查看和进程状态、进程调度和进程状态变化、进程标识
21.1 进程查看和进程状态 21.1.1 ps 指令 ps 指令通常可以查看到进程的 ID.进程的用户 ID.进程状态和进程的 Command ps:查看当前用户启动的进程 ps -ef:详细查看后 ...
- 二十一、Linux 进程与信号---进程资源限制
21.1 进程资源限制 在操作系统中,我们能够通过函数getrlimit().setrlimit()分别获得.设置每个进程能够创建的各种系统资源的限制使用量. 21.1.1 函数 #include & ...
- Linux进程资源占用分析
[时间:2018-03] [状态:Open] [关键词:linux, 进程,proc,top] 0 引言 最近在分析安卓程序上的monkey测试日志时发现,需要了解下Linux进程资源占用情况及其查看 ...
- 使用Shell脚本对Linux系统和进程资源进行监控
ShellLinux脚本 摘要:Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.本文我们以Bash做为实例总结了使用Shell对系统和进 ...
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...
- Ubuntu打开系统监视器查看进程&资源等信息
Ubuntu打开系统监视器查看进程&资源等信息 类似于Windows的任务管理器,Ubuntu也提供了系统监视器供用户管理进程及查看系统占用资源等 打开方式,终端输入如下命令: gnome-s ...
随机推荐
- 原创 gif png bmp jeg 显示方法
/// <summary> /// 注意不要忘记引用那几个图片单元哦,除了bmp格式不需要引用任何单元, /// 其它图片格式都需要引用对应的图片单元 /// png ---> Vc ...
- [译]Java8:循环与函数式编程
Java8函数式编程的加入彻底改变了游戏规则.对Java开发者来说这是一个全新的世界,我们也需要做出相应的改变. 在这篇文章中我们将找寻传统循环代码的可替代方案.Java8的函数式编程特性改变了编程思 ...
- Burpsuite使用技巧
在bp任意窗口中,选中需要转码的字符串,按ctrl+b,则可以被转换成base64编码
- Web.Config文件配置之限制上传文件大小和时间
在邮件发送系统或者其他一些传送文件的网站中,用户传送文件的大小是有限制的,因为这样不但可以节省服务器的空间,还可以提高传送文件的速度.下面介绍如何在Web.Config文件中配置限制上传文件大小与时间 ...
- 哦这。。!C语言scanf输入的坑爹之处
一. 今天闲来无事,跑去A题,本想3sA了poj1004,结果搞了10分钟,最令人困惑的问题就是为什么定义了double类型的变量,但是用scanf输入的时候标识符用%f的话,输入并不能完成,也就是说 ...
- centos7下mail邮件的查看删除、禁止部分应用发邮件
查看与删除 mail命令进入 & p #显示当前邮件& 2 #显示标号为2的文件 & d 1-100 ...
- TDD开发案例
前段时间把一个界面框架完成了,今天基于这个框架开发一个小模块,在这里把这个模块设计的全过程记录下来,希望大家讨论并指正. 一.起因 公司交给我一个任务,为测试员写一个手机模拟界面,以方便她们的手机短信 ...
- Plus One Linked List -- LeetCode
Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...
- 【贪心】【线性基】bzoj2844 albus就是要第一个出场
引用题解:http://blog.csdn.net/PoPoQQQ/article/details/39829237 注意评论区. #include<cstdio> using names ...
- Exercise01_03
public class TuAn{ public static void main(String[] args){ System.out.println(" J A V V A" ...