进程管理--进程创建

news2024/11/25 11:34:11

标记进程

  • PID: 进程/线程ID

一个唯一的进程标识符(PID)来标识进程,PID存放在进程描述符的pid字段中。PID顺序编号,新创建进程的PID通常是上一个进程PID+1

  • TGID:进程ID/线程组ID

一个进程中的所有线程共享相同的tgid。进程的PID和tgid相同

  • pgid:进程组ID

每个进程属于一个进程组,每个进程组有一个Leader进程,也就是进程ID等于进程组ID的那个进程。进程组有生命周期,它的生命周期开始于进程组leader创建进程组,结束于进程组内的最后一个进程离开进程组

进程状态

进程在某一时刻只可能有一种状态。进程可能的状态有:

  1. 可运行状态(TASK_RUNNING): 进程正在执行或者就绪等待CPU调度执行。
  2. 可中断的等待状态(TASK_INTERRUPTIBLE):进程被挂起(睡眠),直到某个条件变为真。处于等待队伍中,等待资源有效时唤醒(比如等待键盘输入、socket连接、信号等等),但可以被中断唤醒。
  3. 不可中断的等待状态(TASK_UNINTERRUPTIBLE):与可中断的等待状态类似,此进程也在睡眠,但不会响应中断。在进程中断可能会导致意外设备状态的情况下使用。
  4. 暂停状态(TASK_STOPPED):进程的执行被暂停。当进程接收到SIGSTOP、SIGTSTP、SIGTTIN以及SIGTTOU信号后,进入暂停状态。
  5. 跟踪状态(TASK_TRACED):被其他进程跟踪,比如通过ptrace对调试程序进行跟踪。
  6. 僵死状态(EXIT_ZOMBIE):子进程资源释放但是进程表项未销毁。
  7. 僵死撤销状态(EXIT_DEAD):当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到。.

进程/线程创建

可以使用fork或vfork创建进程,使用clone系统调用创建线程。在内部都是用kernel_clone实现。区别只是传入的args不同(用来控制新进程或线程与父进程或线程共享什么资源)。

  • fork: 创造的子进程是父进程的完整副本,复制了父亲进程的资源
    • 为什么fork有两个返回值?
      因为这两个返回值是由不同的进程return出来的,而不是由一个fork函数返回两个数。(fork后,进程由一个变成两个,两个进程分别有一个返回值)
      返回值:
        - 成功创建一个子进程,对于父进程来说返回子进程ID
        - 成功创建一个子进程,对于子进程来说返回值为0
        - 如果为-1表示创建失败
    • 子进程创建成功后,代码的执行的开始位置?
      fork代码段的位置
    • 父子进程的执行顺序?
      不一定谁先谁后(看谁抢到CPU资源)
  • vfork: 子进程与父进程共享地址空间, 保证子进程先运行,在它调用 exec/exit之后,父进程才执行

进程拷贝或创建的一个整体调用流程:首先通过系统调用陷入内核,然后kernel_clone完成创建。其中描述符和资源的拷贝,pid的分配等都在copy_process中完成,完成创建后需要通过wake_up_new_task加入调度

kernel_clone

  1. 首先是进行copy_process,copy_process调用 dup task struct()为新进程创建一个内核栈、thread info 结构和 task struct,这些值与当前进程的值相同。此时,子进程和父进程的描述符是完全相同的。
    1. 通过copy_creds复制父进程的权限和身份信息。这之后去检查新创建这个子进程后,当前用户所拥有的进程数目没有超出给分配的资源的限制。
    2. 然后是sched_fork,这个函数进行调度相关的初始化比如设置优先级,调度类,就绪队列等,把进程设置为TASK_NEW,无法运行也无法唤醒(毕竟这时候还没on_rq),这个函数在后面将进程调度会分析。
    3. 然后就是各种资源的copy了,copy之后就分配全局pid和tgid。
    4. copy_process结束,返回一个指子进程描述符的指针
  2. wake_up_new_task使新进程进入就绪状态,并加入就绪队列中,然后检查新进程是否满足抢占当前正在运行进程的条件,如果满足抢占条件需要设置TIF_NEED_RESCHED标志位。
  3. 如果是vfork会将父进程阻塞,直到子进程调用exec/exit之后,父进程才执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】Jeecg-Boot SQL注入漏洞(CVE-2023-34659)

漏洞描述 jeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生…

c语言练习66:模拟实现offsetof

模拟实现offsetof #define offsetof(StructType, MemberName) (size_t)&(((StructType *)0)->MemberName) StructType是结构体类型名,MemberName是成员名。具体操作方法是: 1、先将0转换为一个结构体类型的指针,相当于某个结构体的首…

「康达新材」借力CRM掀起业务升级、组织数字化转型新篇章

近日,康达新材料(集团)股份有限公司(下文简称:康达新材)与纷享销客举行CRM平台项目启动仪式。 启动会上,康达新材董事长王建祥表达了对信息化、数据化建设的需求,并期待以此次合作为…

雷柏mv20鼠标使用体验

用了1年多,第一次用竖着的鼠标,现在已经很习惯了,感觉还不错。说说使用感受: 1、 仍然是长时间使用鼠标,但是很少出现手腕痛的情况,确实是有一定效果的。 2、使用场景是有限制的,我是配合笔记…

关于 自定义的RabbitMQ的RabbitMessageContainer注解-实现原理

概述 RabbitMessageContainer注解 的主要作用就是 替换掉Configuration配置类中的各种Bean配置; 采用注解的方式可以让我们 固化配置,降低代码编写复杂度、减少配置错误情况的发生,提升编码调试的效率、提高业务的可用性。 为什么说“降低…

[补题记录] Atcoder Beginner Contest 299(E)

URL&#xff1a;https://atcoder.jp/contests/abc299 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 给出 N&#xff08;1 < N < 2000&#xff09;个点和 M 条边的一个无向图&#xff0c;要求用白色和黑色对这个图染色。 满足下面两个条件&#xff…

怎么加密U盘文件?U盘文件加密软件哪个好?

当U盘中储存重要数据时&#xff0c;我们需要保护U盘文件安全&#xff0c;避免数据泄露。那么&#xff0c;怎么加密U盘文件呢&#xff1f;U盘文件加密软件哪个好呢&#xff1f; ​U盘数据怎么避免泄露&#xff1f; 想要避免U盘数据泄露&#xff0c;最佳的方法就是对U盘文件进行…

C#解析JSON详解

C#解析Json详解 文章目录 C#解析Json详解什么是Json&#xff1f;Json的特点 常用的Json库Json.NET (Newtonsoft.Json)System.Text.Json 实例序列化反序列化 总结 什么是Json&#xff1f; JSON的全称是JavaScript Object Notation&#xff0c;是一种轻量级的数据交换格式&#…

作为一名独立开发者,如何获取客户?

很多程序员想成为一名独立开发者&#xff0c;从事自由职业&#xff0c;最大的困难在于如何赚钱&#xff0c;进一步来说&#xff0c;就是如何找到自己的客户&#xff0c;有很多开发者拥有丰富的经验&#xff0c;优秀的能力&#xff0c;但无法吸引客户。这篇文章的灵感正是为此而…

Qt扩展-QCustomPlot 简介及配置

QCustomPlot 简介及配置 一、概述二、安装教程三、帮助文档的集成 一、概述 QCustomPlot是一个用于绘图和数据可视化的Qt 控件。它没有进一步的依赖关系&#xff0c;并且有良好的文档记录。这个绘图库专注于制作好看的、发布质量的2D绘图、图形和图表&#xff0c;以及为实时可…

【面试题】Promise只会概念远远不够,还需这17道题目巩固!

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 在学习Promise相关题目之前&#xff0c;我们先做一些知识的回顾&#xff1a;JavaScript 是一门单…

自动化测试面试经历

一家做户外的外企 面试问题 1、自我介绍&#xff1a;大概介绍了自己的工作经历 2、数据库问题&#xff1a;学生表中包含id、姓名、成绩、班级&#xff0c;求平均成绩 回答&#xff1a;group by 班级&#xff0c;求平均&#xff08;不够完美&#xff09; 3、java的访问修饰符…

MQ - 32 基础功能:消息查询的设计

文章目录 导图概述什么时候会用到消息查询消息队列支持查询的理论基础消息数据存储结构关于索引的一些知识点内核支持简单查询根据 Offset 查询数据根据时间戳查询数据根据消息 ID 查询数据借助第三方工具实现复杂查询第三方引擎支持查询工具化简单查询总结导图 概述 从功能上…

Error:java: 错误: 不支持发行版本 5

当创建maven项目之后&#xff0c;编译一个简单的helloworld,发生以下报错 : Error:java: 错误: 不支持发行版本 5 解决方案 : File -> Settings -> BUIld,Execution,Deployment -> Compiler -> Java Compiler 将Module表格中的Target bytecode version的1.5换…

【优测云服务平台】打造承载百倍级增长后台背后的力量-性能优化

项目介绍&#xff1a; 腾讯课堂是腾讯推出的专业在线教育平台&#xff0c;凭借技术优势&#xff0c;实现在线即时互动教学&#xff0c;打破地域的限制&#xff0c;让每个人都能接受优秀老师的指导和教学。 一、背景 2020年初&#xff0c;新冠病毒肆虐&#xff0c;疫情大面积爆…

基于SSM的办公用品管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

cocoscreator3.X 强更 游戏内下载APK和安装APK

本文环境3.6.0&#xff0c;目测3.7, 3.8都可以用 强制更新是强制用户下载整包并覆盖安装&#xff0c;因为android部分代码不方便热更&#xff0c;所以游戏内采用服务器推送下载通知&#xff0c;游戏执行下载后再安装的形式. 下载完全可在ts层完成&#xff0c;可采用cocoscrea…

继苹果、联发科后,传高通下一代5G芯片将由台积电以3纳米代工

台积电3纳米又有重量级客户加入。市场传出&#xff0c;继苹果、联发科之后&#xff0c;手机芯片大厂高通下一代5G旗舰芯片也将交由台积电以3纳米生产&#xff0c;最快将于10月下旬发表&#xff0c;成为台积电3纳米第三家客户。 针对相关传闻&#xff0c;至昨日&#xff08;25日…

基于SpringBoot的药房管理系统

基于SpringBootVue的药房管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;管理员、用户 管理员&am…

共享门店模式:一种新兴的商业模式

共享门店模式是一种利用实体店铺的空间和资源&#xff0c;让多个品牌或商家在同一地点共同运营的商业模式。这种模式可以提高店铺的利用率&#xff0c;降低经营成本&#xff0c;增加客流量&#xff0c;实现资源的最大化利用。如果你是一个有创业想法的企业家&#xff0c;或者你…