本章介绍linux系统进程概念以及线程,讨论在linux内核中是如何对进程进行管理的以及进程结束流程。

关于进程的概念在操作系统概念--操作系统中的进程、线程中已经描述过,这里不在赘述,在应用层一般理解是一个应用实例是一个进程,一个进程又可以包含多个线程,但是在传统的unix系统中每个进程都是由一个线程组成的,而Linux系统内核中也有单独的对线程的实现机制:即不区分线程和进程。

进程创建销毁概述

Linux中一个进程生命周期的开始要从fork()这个大名鼎鼎的系统调用开始,fork()调用返回两次:一次是父进程pid,然后是子进程pid,fork完成后子进程和父进程还是一样的,直到调用exec()家族函数为子进程创建自己的地址空间以及加载相关代码到内存,fork函数实际上是调用的clone系统调用来实现进程拷贝的,

进程的结束是通过调用exit系统调用来实现的,此函数会结束当前进程并且释放当前进程所占用的相关资源,父进程可以通过wait4()系统调用来收集子进程的退出信息,当进程结束的时候会被置为zombie状态,如果父进程调用wait或者waitpid,标记为zombie状态的进程就会结束。

进程描述符

内核会把进程存储在一个叫做task list的循环双链表结构中,双链表中的每个元素都使用task_struct结构体描述该结构体被定义在头文件<linux/sched.h>中<include/linux/sched.h>:

struct task_struct {volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */struct thread_info *thread_info;atomic_t usage;unsigned long flags;    /* per process flags, defined below */unsigned long ptrace;int lock_depth;     /* Lock depth */int prio, static_prio;struct list_head run_list;prio_array_t *array;
...
...
#endif
#ifdef CONFIG_NUMAstruct mempolicy *mempolicy;short il_next;
#endif
};

该结构体内容较多,请自行下载内核源代码进行预览,此结构体在32为机器上大概会占用1.7kb,但是考虑到此结构体所携带的所有内核所需要的关于进程的信息而言,这点空间占用也不算大,它包含了描述进程的数据:打开的文件、进程空间地址、信号量、进程状态等等。

分配进程描述符

task_struct结构体通过slab内存分配器来分配空间,linux kernel 2.6系列中task_struct被存储在每个进程的内核栈的尾部,这样可以避免使用额外的寄存器去存储结构体的位置,这就为寄存器紧张的架构如x86带来了好处,通过计算栈指针就可以找到task_struct的存储位置了,在linux系统中,虽然task_struct是用来描述一个进程,但是task_struct描述的是进程的通用部分,不同CPU架构之间的差异化描述则由thread_info结构体来描述,该结构体存储在内核栈的尾部,它包含一个task元素指向和他对应的一个task_struct,所以实际上一个进程是由thread_info和task_struct两个结构体共同来描述的,定义在thread_info.h头文件中

<include/asm-xxx/thread_info.h>:

struct thread_info {struct task_struct  *task;      /* main task structure */struct exec_domain  *exec_domain;   /* execution domain */__u32           flags;      /* low level flags */__u32           status;     /* thread synchronous flags */__u32           cpu;        /* current CPU */int             preempt_count;mm_segment_t        addr_limit; struct restart_block    restart_block;
};

进程状态

LKD-Linux系统进程管理相关推荐

  1. linux进程管理内存管理,Linux专业知识四:Linux系统进程管理及查看内存

    本文主讲Linux专业知识之Linux系统进程管理及查看内存的情况,以Redhat RHEL7操作系统为例. 一.进程 程序与进程:程序是静态的(文件),进程是动态的(运行的程序). 进程和线程:一个 ...

  2. linux系统进程管理工具,Linux系统进程管理工具

    对于Linxu系统运维工程师来说好的系统进程管理工具,就像一把利器,无坚不摧,可以使用这些工具发现造成性能问题可能原因,提升团队的工作效率,本篇知识提及一些简单常用系统管理工具包括了pstree.ps ...

  3. Linux 系统进程管理

    在 Windows 中主要是使用"任务管理器"来进行进程管理的.目的是: 1)利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和 ...

  4. go linux下进程守护,Linux系统进程管理-Go语言中文社区

    一.进程基础知识 1.1 Linux进程的概念 Process:是运行中的程序的一个副本,是被载入内存的一个指令集合.进程ID(Process ID,PID)号码被用来标记各个进程 UID.GID.和 ...

  5. Linux系统进程管理

    1. ps "ps"是Linux 中最基础的浏览系统中的进程的命令.能列出系统中运行的进程,包括进程号.命令.CPU使用量.内存使用量等. 2. pstree linux中,每一个 ...

  6. 【树莓派不吃灰】兄弟连篇⑥ Linux系统进程管理

    目录 1.进程查看 1.1 ps 1.2 top 1.3 pstree 2.终止进程 2.1 kill 2.2 killall 2.3 pkill 3.工作管理 4.系统资源查看 4.1 vmstat ...

  7. Linux 系统进程管理与定时任务

    文章目录 前言 一:程序,进程,线程之间的关系 1.1:进程概述 1.2:应用程序,进程和线程的关系 1.2.1:程序和进程的关系 1.2.2:进程和线程的关系 2.1:静态查看 ps命令 2.1.1 ...

  8. linux进程通信核心态时间,Linux进程管理简谈

    Linux系统进程管理简谈 进程是什么? 进程是对处理器.主存和I/O设备的抽象表示. 进程是操作系统对一个正在运行的程序的一种抽象,在一个系统上可以同时运行多个进程,而每个进程都好像在独占的使用硬件 ...

  9. Linux学习-47-Linux系统进程管理和启动方式

    12 Linux系统管理(进程管理.工作管理和系统定时任务) 系统管理只是一个统称,软件管理.文件系统管理.启动管理和服务管理都可以归入系统管理当中. 主要了解进程管理.工作管理和系统定时任务.同时解 ...

  10. Linux 入门 day5 系统进程管理、yum仓库搭建

    一.系统进程管理 1.1 系统启动 systemctl get-default syetemctll set-default graphical .target (改为图形化界面) syetemctl ...

最新文章

  1. 递归和迭代的区别是什么,各有什么优缺点?
  2. oc之mac开发 - NSButton - 勾选框(NSButtonTypeSwitch)
  3. 逆序数 UVALive 6508 Permutation Graphs
  4. 图神经网络(一)图信号处理与图卷积神经网络(1)矩阵乘法的三种方式
  5. Python切片各种情况详解
  6. 很口语blood-aholic
  7. inputstream示例_Java InputStream available()方法与示例
  8. 用 C# 实现带键值的优先队列
  9. 针对医疗数据进行命名实体识别
  10. idea破解码(最后一个有用)
  11. 前端基础入门之css表格与表单
  12. 237. 删除链表中的节点
  13. 完整版JavaWeb环境搭建-maven-servlet...与测试,欢迎大家一起学习
  14. 荣耀智慧屏x1鸿蒙2.0功能,让家庭中心回归客厅-荣耀智慧屏X1评测
  15. Oracle数据库字符集问题解决方案大全
  16. 谭铁牛院士谈人工智能发展新动态
  17. jquery触发键盘按下事件
  18. 塔望食品品牌策划:中国鳗鱼行业市场现状及发展趋势分析
  19. 2010水瓶座年运势
  20. android多级列表

热门文章

  1. java语言里的事件_深入浅析java语言的事件处理
  2. c语言课程设计万年历,C语言课程设计--万年历.doc
  3. oracle ebc,《Oracle 10G 系统教程 中科院培训老师讲授》
  4. 供应链需求调研CheckList
  5. Android实现-心知天气API接口开发(天气预报app)
  6. 链表操作——两数相加
  7. 爱心 python 词云_python 词云
  8. 汽车电子标识标准呼之欲出
  9. win10 Opencv4.5.0源码编译支持CUDA加速
  10. 服务器存储文件解决方案,服务器及存储解决方案-20210724001444.docx-原创力文档