Linux进程详解二:创建、状态、进程排队

文章目录

  • 进程创建
  • 进程状态
    • 进程排队

进程创建

  • pid_t fork(void)
    • 创建一个子进程
    • 成功将子进程的pid返回给父进程,0返回给新创建的子进程

fork之后有两个执行分支(父和子),fork之后代码共享
bash -> 父 -> 子

创建一个进程时,操作系统会先构建pcb内核数据结构,再将代码和数据进行加载。

创建子进程时,我们一般想让父进程与子进程做不同的事情。
通过下面的控制,可以将父进程和子进程执行不同的代码块。

pid_ id = fork();
if(id < 0)
{return 0;
}
else if(id == 0)
{//子进程进入执行
}
else
{//父进程进入执行
}

代码共享

进程 = 内核数据结构 + 可执行程序的代码和数据

每个进程都存在task_struct和其相对应的加载到内存中的代码和数据,当父进程开始运行的时候,父进程存在一个task_struct和代码数据,此时父进程通过fork创建了一个子进程,当子进程创建成功的时候,系统自动为子进程分配了一个task_struct,但是子进程没有其相对应的代码和数据,所以子进程只能使用父进程对应的代码和数据。

子进程pcb中的大部分属性都继承于父进程。
子进程被创建的时候,是以父进程为模板的。

fork返回值
因为父子关系中,父亲只能有一个,而儿子可以有多个,对于儿子来说,他的父亲是唯一存在的,所有用儿子找父亲很明确。但是对于父亲而言,父亲可以存在多个儿子,当父亲去寻找儿子的时候是不明确的,所以当使用fork进行子进程的创建的时候,将新创建的子进程的pid交给父亲,让父亲知道哪个进程是他的儿子,而不需要将父进程的pid交给子进程,因为父进程对子进程是唯一的,所以fork向子进程返回0。

当父进程中过的代码执行到fork的时候,进入fork的内部函数中,fork的内部函数中首先创建一个子进程然后将父进程的部分属性继承到新创建的子进程中,将父进程对应的代码数据与子进程进行共享,此时子进程已经创建完成了,但是fork函数还没有执行完成,fork需要进行return返回,此时父进程和子进程已经同时存在了,所以fork的return被执行了两次,一次在父进程中,一次在子进程中。所以fork函数会返回两次。

任何进程之间都是具有独立性的,互相不会进行影响。

写时拷贝
当父子进程任何一方想要对数据进行修改的时候,操作系统会对需要进行修改的数据,重新进行拷贝一份,父和子各指向一份这个数据,这个过程称为写时拷贝。
据此,在Linux中可以用同一个变量名表示不同的内存空间。

杀掉进程
kill -9 pid

exit(0) 让进程直接结束

进程状态

进程排队

队列

进程 = task_struct + 可执行程序的代码和数据

进程不是一直在运行的,它可能在等待某种软硬件资源,进程即使加载到cpu中,也不是一直会运行的。

时间片

进程排队,一定是进程在等待某种资源。

进程排队,一定是tast_struct在进行排队。


一个task_struct可以被链入多种数据结构中。
一个pcb中可以存在多种数据结构结点,所以一个pcb可以同时在多种数据结构中进行排队。

偏移量:&((task_struct*)0->n)

当前进程pcb的首地址
(task_struct*)(&n - &((task_struct*)0->n)

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

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

相关文章

比特币成长的代价

作者&#xff1a;Jeffrey Tucker&#xff0c;作家和总裁。曾就经济、技术、社会哲学和文化等话题广泛发表演讲。编译&#xff1a;秦晋 2017 年之后参与比特币市场的人遇到了与之前的人不同的操作和理想。如今&#xff0c;没有人会太在意之前的事情&#xff0c;说的是 2010-2016…

【全网首发】Mogdb 5.0.6新特性:CM双网卡生产落地方案

在写这篇文章的时候&#xff0c;刚刚加班结束&#xff0c;顺手写了这篇文章。 前言 某大型全国性行业核心系统数据库需要A、B两个物理隔离的双网卡架构方案&#xff0c;已成为行业标准。而最新发布的MogDB 5.0.6的CM新增支持流复制双网段部署&#xff0c;用于网卡级高可用容灾(…

【Linux开发实用篇】备份与恢复

备份 实体机无法做快照&#xff0c;我们可以使用备份和恢复技术 第一种方式 把需要的文件&#xff08;或者分区&#xff09;用TAR打包就好&#xff0c;下次恢复的时候进行解压 第二种方式 使用dump 和 restore 指令&#xff1a; 首先安装这两个指令 yum -y install dump, …

参数传递 的案例

文章目录 12 1 输出一个int类型的数组&#xff0c;要求为&#xff1a; [11,22,33,44,55] package com.zhang.parameter; //有关方法的案例 public class MethodTest3 {public static void main(String[] args) {//输出一个int类型的数组&#xff0c;要求为&#xff1a; [11,…

Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project

Android studio顶部app红叉- Moudle ‘XX.app’ dosen’t exist in project 1、现象&#xff1a; 运行老项目或者有时候替换项目中的部分代码&#xff0c;明明没有错但是Android studio就编译报错了。 1.1 Android studio顶部app红叉。 1.2 点击Build没有clear菜单&#xff0…

行为审计软件合集|3款好用的上网行为管控软件推荐

网络技术的快速发展使得企业对于员工上网行为的管控需求也日益增强。 上网行为管控软件不仅可以有效监控员工的网络活动&#xff0c;提高工作效率&#xff0c;还可以防止敏感信息的泄露&#xff0c;保障企业的网络安全。 本文将为您推荐三款好用的上网行为管控软件&#xff1a…

『视觉感官盛宴』3D线上商场全方位展示商品与互动购买体验

随着技术的进步和消费者需求的多样化&#xff0c;3D线上商场作为一种新兴的电子商务平台&#xff0c;正逐渐改变传统的在线购物模式。 一、商品展示革命 在3D线上商场中&#xff0c;商品展示不再局限于静态图片和文字描述。借助先进的3D建模技术&#xff0c;商家能够创建商…

1557.可以到达所有点的最少点数目

题目 给你一个 有向无环图 &#xff0c; n 个节点编号为 0 到 n-1 &#xff0c;以及一个边数组 edges &#xff0c;其中 edges[i] [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以…

电磁仿真--基本操作-CST-(2)

目录 1. 回顾基操 2. 操作流程 2.1 创建工程 2.2 修改单位 2.3 创建 Shape 2.4 使用拉伸 Extrude 2.5 修改形状 Modify Locally 2.6 导入材料 2.7 材料解释 2.8 材料分配 2.9 查看已分配的材料 2.10 设置频率、背景和边界 2.11 选择 Edge&#xff0c;设置端口 2.…

【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序(万字博文)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 目录 …

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略&#xff0c;传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下&#xff0c;海特伟业紧跟时代步伐&#xff0c;凭借其深厚…

linux常用非基础命令/操作

本篇用于总结蒟蒻博主在使用linux系统的过程中会经常用到但老实记不住的一些非基础命令和操作&#xff0c;方便遗忘时查阅 一&#xff0c;关闭指定端口的进程以释放端口 每个端口都有一个守护进程&#xff0c;kill掉这个守护进程就可以释放端口 ①使用命令【netstat -anp | gre…

[大模型]Qwen-Audio-chat FastApi 部署调用

Qwen-Audio-chat FastApi 部署调用 Qwen-Audio 介绍 Qwen-Audio 是阿里云研发的大规模音频语言模型&#xff08;Large Audio Language Model&#xff09;。Qwen-Audio 可以以多种音频 (包括说话人语音、自然音、音乐、歌声&#xff09;和文本作为输入&#xff0c;并以文本作为…

GoJudge环境部署本地调用云服务器部署go-judge判题机详细部署教程go-judge多语言支持

前言 本文基于go-judge项目搭建&#xff0c;由于go-judge官网项目GitHub - criyle/go-judge: Sandbox Server in REST / gRPC API. Based on Linux container technologies.&#xff0c;资料太少&#xff0c;而且只给了C语言的调用样例&#xff0c;无法知道其他常见语言比如&am…

【Unity学习笔记】第十三 · tag与layer(运行时创建tag和layer)

参考&#xff1a; Unity手册 标签Unity手册 LayersIs it possible to create a tag programmatically?脚本自动添加tag和Layer 注&#xff1a;本文使用Unity版本是2022.3.23f1 转载引用请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/de…

【JavaScriptthreejs】对于二维平面内的路径进行扩张或缩放

目标 对指定路径 [{x,y,z},{x,y,z},{x,y,z},{x,y,z}.........]沿着边缘向内或向外扩张&#xff0c;达到放大或缩小一定范围的效果&#xff0c;这里我们获取每个点&#xff08;这里是Vector3(x,y,z)&#xff09;,获取前后两个点和当前点的坐标&#xff0c;计算前后两点的向量&a…

Ubuntu 安装 Harbor

一、安装 docker 原文参考传送门 1st 卸载系统自带的 docker 应用 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 2nd 设置Docker 的apt源 # Add Dockers official GPG key: sudo…

漫谈-AI 时代的信息模型

模型化- 数字化转型的重要基石 在各行各业推行数字化转型过程中&#xff0c;构建信息化模型十分重要&#xff0c;它是数字化转型的基石。事实上&#xff0c;数字化转型的核心是“万物皆模型”&#xff0c;在工业领域&#xff0c;以德国为主导的工业4.0 发展进程中&#xff0c;…

条件编译 #和##运算符

目录 1. #运算符2. ##运算符3. 条件编译4. 题目分享总结 正文开始 前言: 本章为C语言语法完结撒花, 下文将进行C语言中#和##操作符以及条件编译的讲解, 来进一步让我们了解C语言. 作者主页: 酷酷学!!! 1. #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带…

海外仓系统能做什么?提升仓库盈利能力,不再低效经营!

海外仓管理系统和机械设备不同&#xff0c;这句话看似有点矛盾&#xff0c;但是还真就是这么回事儿。 当机械设备出现故障的时候&#xff0c;你会明确的知道他无法运转&#xff0c;已经影响到你的生产效率了。但是海外仓系统不会&#xff0c;它看似还可以运转&#xff0c;但是…