linux 进程学习笔记-进程状态
task_struct的state字段记录的进程的状态,可分为如下几种: #define TASK_RUNNING 0 可运行状态。这是 “进程正在被CPU运行” 和 “进程正在可运行队列中等待被CPU运行” 统称。也可以将它们拆开成“RUNNING”和“READY”两种状态。 #define TASK_INTERRUPTIBLE 1 可中断的睡眠状态。当进程等待某个条件(比如某个资源,中断,信号)而被挂起时就处于该状态,当条件得到满足时,进程将会重新返回到TASK_RUNNING状态。 #define TASK_UNINTERRUPTIBLE 2 不可中断的休眠状态。与TASK_INTERUPTIBLE类似,但不同的是其不会响应信号,其会一直等待直到条件得到满足。 #define TASK_ZOMBIE 4 僵死状态。进程的执行被终止,但还未完全退出时的状态。系统总会假设一个进程退出前其父进程始终对其感兴趣,所以当进程被终止时,系统会通知父进程来收集相关信息,当父进程收集完毕后(发布wait()调用后),进程废除过程才会继续进行以丢弃数据。(如果子进程退出时,父进程已经不存在了,在父进程的工作会由init进程代理) #define TASK_STOPPED 8 暂停状态。有一些信号可以让进程暂停被执行而处于暂停状态,比如SIGSTOP (Stop executing temporarily), SIGTSTP (Terminal stop signal), SIGTTIN (Background process attempting to read from tty), SIGTTOU (Background process attempting to write to tty). 另外,当一个进程被另外一个进程监视(ptrace)时,任何信号都会让被监视进程处于TASK_STOPPED状态(一个典型例子是程序的DEBUG时,被调试程序就经常处于该状态,看到有的资料上也将该状态分离出来,叫着TASK_TRACED) 结合下面这个图我们可以看看一个进程的生命周期: 调用fork函数而创建一个新进程后,如果紧接着调用了exec族函数的话,新进程会被放置到可执行队列等待被CPU执行,如果仅仅是调用fork函数,那么新进程的状态和父进程的状态完全相同(Run in User Mode 或Run in Kernel Mode)。 当进程在用户模式运行时,如果发生了系统调用,则进程会进入到内核模式(Run in Kernel Mode)。 假设此时的是一个磁盘文件读取操作,而该操作比较慢,进程将放弃CPU而进入休眠状态(Sleeping)并且时机成熟(读取完成,数据就绪)而被唤醒。 当进程退出(比如调用exit()函数)后,其会变成僵死进程而进入Zombie状态。
linux 进程学习笔记-进程状态的更多相关文章
- linux 进程学习笔记-等待子进程结束
<!--[if !supportLists]-->Ÿ <!--[endif]-->等待子进程结束 pid_t waitpid(pid_t pid, int *stat_loc, ...
- linux进程学习笔记
学习了linux下的进程,觉得应该整理一下,忘得差不多了,顺便回顾一下. 学而时习之,不亦说乎~~ 进程笔记 ,什么是进程? The Single UNIX Specification, Versio ...
- Linux 进程学习笔记
1.什么是程序?什么是进程?它们有什么区别? 定义: 程序:程序(Program)是一个静态的命令集合,程序一般放在磁盘中,然后通过用户的执行来触发.触发后程序会加载到内存中成为一个个体,就是进程. ...
- linux 进程学习笔记-进程ID,PID
PID,进程号 , 范围在2~(??为什么需要这么多),而一个名为idle (或swapper)的进程占据的编号0,init进程占据了编号1. 进程0和进程1 : 系统启动时会从无到有地创建进程0,它 ...
- linux 进程学习笔记-进程调度
在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调 ...
- linux 进程学习笔记-进程跟踪
进程跟踪 long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); Linux用ptrace来进行进 ...
- linux 进程学习笔记-进程信号sigal
信号(或软中断)是在软件层次上对中断的一个模拟,其运行在“用户空间”,一个进程对另外一个或几个进程通过发送信号来实现异步通信.当接收进程接收到信号后,其可以注册一下处理函数来说对这些信号进行处理(也可 ...
- linux 进程学习笔记-运行新进程
我们知道,当用fork启动一个新进程以后,新进程会复制父进程的大部份内存空间并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一个程序集中的代码,这就相当于启动了一个新程序. ...
- linux 进程学习笔记-进程退出/终止进程
<!--[if !supportLists]-->Ÿ <!--[endif]-->退出/终止进程 void _exit(int status) 与 void exit(int ...
随机推荐
- Java函数的基本知识
http://blog.csdn.net/cxwen78/article/details/7322891主要从Java函数的定义,函数的特点,函数的应用,函数的重载四个方面来讲解Java函数. 一.函 ...
- 使用sphinx生成美观的文档
先上效果图 详情 首先,须要知道什么是restructuredtext.能够理解为类似于markdown的一个东西. 然后 安装.pip install sphinx 进入存放文档的文件夹,在命令行, ...
- linearLayout 和 relativeLayout的属性区别
LinearLayout和RelativeLayout 共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:l ...
- linux下安装最新版Subversion 1.8.9
linux下安装最新版subversion,代码: [root@localhost subversion-1.8.9]# ./configure --prefix=/usr/local/subvers ...
- 用HttpClient模拟HTTP的GET和POST请求(转)
本文转自:http://blog.csdn.net/xiazdong/article/details/7724349 一.HttpClient介绍 HttpClient是用来模拟HTTP请求的,其 ...
- 800元组装一台3D打印机全教程流程
我最近正好要组装一台新的reprap的kossel delta型开源3d打印机,这台机器性价比非常高,具有速度快,静音,三臂并联结构,扩展性强,便宜的特点.图纸啥的都有,只是用到mega2560和ra ...
- ASP.NET动态网站制作(11)-- JQ(3)
前言:这节课主要是讲CSS作业,然后继续讲jQuery. 内容: 1.css作业讲解. 2.jq设置元素样式: (1)添加.删除css类别:$("div").addClass(& ...
- 基于redis的分布式锁二种应用场景
“分布式锁”是用来解决分布式应用中“并发冲突”的一种常用手段,实现方式一般有基于zookeeper及基于redis二种.具体到业务场景中,我们要考虑二种情况: 一.抢不到锁的请求,允许丢弃(即:忽略) ...
- 多线程快速解压FastZipArchive介绍
本文转载至 http://blog.csdn.net/xunyn/article/details/12975937 多线程解压iosfast 在iOS项目中用到解压缩,用的是ZipArchive ...
- 我的Java开发学习之旅------>Java经典排序算法之希尔排序
一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...