linux内核 进程管理
进程和线程
进程不单单包含可执行代码(代码段),好包含打开的文件,挂起的信号,处理器状态,虚拟内存地址等。
线程:从内核的角度来说,它并没有线程这个概念。Linux把所有线程都当做进程来实现。内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一属于自己的task_struct,所以在内核中,它看起来就像是一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间)。
linux中的线程只是多进程实现资源共享的一种方式。
逻辑上说,线程自己基本不拥有系统资源,只拥有少量必不可少的资源:程序计数器、一组寄存器、栈。
linux内核通常把进程叫做任务(task)。
进程描述符及任务结构
内核把所有的进程存放在一个双向循环列表中,这个列表叫任务队列(task list)。实际上,任务队列中,存放的是进程的描述信息,成为进程描述符。
进程描述符记录能够完整的描述一个进程的所有信息:PID进程ID,打开的文件,进程的地址空间,挂起的信号,进程的状态等等。
进程的状态:
- Linux进程状态:R (TASK_RUNNING),可执行状态,要么正在执行,要么在运行队列总等待执行。
- Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可接收信号并被唤醒,然后重新投入运行。
- Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 即使接收到信号也不会唤醒。
- Linux进程状态:T (TASK_STOPPED or TASK_TRACED),停止状态或跟踪状态, 不可处理signal, 因为根本没有时间片运行代码
- Linux进程状态:Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程。不可被kill, 即不响应任务信号, 无法用SIGKILL杀死
所有的进程都是pid为1的init进程的后代。
创建进程
linux通过fork创建进程。父进程执行fork,linux然后复制父进程来创建子进程,复制完成后,父进程继续执行,子进程调用exec执行。
写时拷贝:注意,这里的复制只是复制进程相关的信息(如页表和进程描述符),不包含进程的内存空间,复制完成后,父进程和子进程共享相同的内存空间,只有PID和PPID不一样。如果后期父进程或者子进程对某一个内存页进行了写入,linux才会对这个内存也进行复制,然后在复制的版本执行写入。
进程终结:
进程通过调用exit()终结自己,这个方法会释放进程的所有资源,但是会保留进程描述符等相关信息,这时进程处于Z状态(僵尸进程),目的是为父进程提供信息。如果父进程先于子进程已经终结(也就是说父进程终结的时候,linux不会自动终结子进程),那么这个进程就会永远处于僵尸状态,所以linux会为这种进程找到一个进程作为父进程:当前进程组的某一个进程或者init进程。
我的理解:使用kill -15来终结进程,进程有时间去终结自己的子进程(如果有必要的话),使用kill -9则不会。
linux内核 进程管理的更多相关文章
- Linux内核——进程管理与调度
进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...
- Linux内核 ——进程管理之进程诞生(基于版本4.x)
<奔跑吧linux内核>3.1笔记,不足之处还望大家批评指正 进程是Linux内核最基本的抽象之一,它是处于执行期的程序.它不仅局限于一段可执行代码(代码段),还包括进程需要的其他资源.在 ...
- Linux内核——进程管理之CFS调度器(基于版本4.x)
<奔跑吧linux内核>3.2笔记,不足之处还望大家批评指正 建议阅读博文https://www.cnblogs.com/openix/p/3262217.html理解linux cfs调 ...
- Linux内核——进程管理之SMP负载均衡(基于版本4.x)
<奔跑吧linux内核>3.3笔记,不足之处还望大家批评指正 根据实际物理属性,CPU域分类如图1所示. 图1 CPU域分类 问题一:一个4核处理器中的每个物理CPU拥有独立L1 cach ...
- linux内核——进程管理
在讲进程之前先说一下进程的堆栈的吧: 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同一时候,会为进程创建对应的堆栈.每一个进程会有两个栈,一个用户栈.存在于用户空间,一个内核栈 ...
- Linux内核电源管理综述
资料:http://blog.csdn.net/bingqingsuimeng/article/category/1228414http://os.chinaunix.net/a2006/0519/1 ...
- Linux操作系统的进程管理
Linux操作系统的进程管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程相关概念 1>.进程概述 内核的功用: 进程管理.文件系统.网络功能.内存管理.驱动程序. ...
- linux 系统管理--进程管理
目录 linux 系统管理--进程管理 一.进程基本概述 二.监控进程状态 三.进程的优先级[进阶] 四.企业案例,Linux假死是怎么回事 五.后台进程管理 六.系统平均负载[进阶] linux 系 ...
- .Neter玩转Linux系列之五:crontab使用详解和Linux的进程管理以及网络状态监控
一.crontab使用详解 概述:任务调度:是指系统在某个时间执行的特定的命令或程序. 任务调度分类: (1)系统工作:有些重要的工作必须周而 复始地执行. (2)个别用户工作:个别用户可能希望执 行 ...
随机推荐
- JavaScript 控制台打印window对象
示例代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- Swagger2异常:Illegal DefaultValue null for parameter type integer java
一.异常分析: Illegal DefaultValue null for parameter type integer`和`NumberFormatException: For input stri ...
- Ubuntu18.04.3主力开发机使用记录(一)
现在是2019年12月02日,在公司使用Ubuntu作为开发机器已经有一段时间了 查看主分区创建时间 安装时间8月26 当时周一,一个新的迭代刚刚开始,早上来到公司发现开不了机:Windows报错蓝屏 ...
- 页面元素定位-----android真机
一.移动终端开发者选项启用USB调试模式 二.USB线连接移动终端,CTRL+R启动DOS窗口,输入:adb devices,出现以下信息,说明连接成功 三.启动appium,配置appium相关信息 ...
- [转帖]Xenix — 微软与UNIX的短暂爱恋
Xenix — 微软与UNIX的短暂爱恋 https://www.linuxdashen.com/xenix-微软与unix的短暂爱恋 原来微软曾经 干过那么牛B的 unix系统. 微软向外宣布Mic ...
- 【Java学习】类、对象、实例—类是对象的抽象,对象是类的实例
类.对象.实例的关系是什么,如果不能很好的理解什么是类什么是对象就无法讲清楚, 类:某种事物与另一种事物具有相似性,比如哈士奇和泰迪,我们发现他们有一些相似的特性和行为,在生物学上,他们都属于“狗”, ...
- Spring4学习回顾之路01—HelloWorld
以前公司一直使用的是spring3.0,最近一段时间开始用了4.0,官网上都已经有了5.0,但是很多知识点已经忘了差不多了,趁现在项目不忙写写随笔,一来回顾自己的知识点,二来如果能帮助比我还小白的小白 ...
- mysql-tpcc测试
os: centos 7.4 db: mysql 5.7 software: tpcc-mysql TPC-C是专门针对联机交易处理系统(OLTP系统)的规范. tpcc-mysql是percona基 ...
- Neo4j图数据库配置文件详解
For more details and a complete list of settings, please see https://neo4j.com/docs/operations-manua ...
- lesson12Homework
package StringPractice; public class arrayTest { //1. 把A数组的前5个元素复制到B数组中. public static void main(Str ...