波奇学Linux:父子进程和进程状态

2023-12-16

vim编辑器,编写一个程序模拟进程

在vim中查看sleep函数

底行模式输入

写个Makefile自动运行 波奇学Linux:yum和vim-CSDN博客

运行程序

PID和PPID

查看进程目录信息

实际有过滤出来有两个,一个进程本身一个是grep程序,通过 -v grep过滤走含grep的进程。

目录中的PID相当于进程的唯一标识符。就是给进程分配一个号码,这个数字和进程之间是一一对应的。

PID是进程的属性,那么PID是在 struct task_struct结构体中。

task_struct( 波奇学Linux:冯诺依曼和进程-CSDN博客 )

​​​​​​​

ps ajx本质是就是遍历双向链表。

而PPID是该进程的父进程的编号

查看父进程信息,可知父进程是-bash命令行

当xhell打开时会运行bash进程,而每个命令行command都是bash的子进程 。

因此当make 时命令行会创建子进程来启动程序。

kill 指令 关闭进程

输入指令kill -9 PID 关闭进程

getpid()和getppid()返回进程的PID和PPID,证明PID确实是进程PCB的属性

查看函数信息可以用命令行!man查看

PID和PPID刚好吻合

fork创建子进程

编写程序

第二号的after line打印两遍的原因是fork创建了一个子线程,子线程运行了一遍printf("after line\n");

fork会返回两次,创建子进程成功,返回子进程的PID给父进程,返回0给子进程

说明确实父子进程同时运行 。

初步理解fork的原理

代码的执行流是从上往下的,遇到fork函数时一份为二。

fork函数内部构拷贝一份父线程的task_struct,子线程指向父线程的代码,因此子父线程共享代码。

子父线程相对独立,不共享数据。因此父线程 写时拷贝 数据给子线程。当子线程要修改父线程的变量时,会把变量拷贝一份,开辟空间给子线程。既避免了浪费空间还避免子线程修改父线程的变量。

fork return两次,因此一般fork下要分流,分出父子线程。

父进程和子进程谁先运行是由调度器决定的。

bash创建子进程,底层调用了fork

进程状态:运行,阻塞,挂起

运行

运行一个进程会把进程放入一个运行队列 runqueue

通过控制task_struct指针来控制进程的运行先后,每个进程都有一个时间片的概念

并且有个时间片如10ms,比如这个进程一可能运行10ms。

并发执行:在一段时间内所有的在队列中的进程都会运行。

处于运行队列的进程为R态:随时被调度。
把进程从cpu上拿下来或者放上去,进程切换。

阻塞:离开运行队列,进程进入等待队列。

某个进程(比如含有scanf的语句)必须从外设从获取 数据输入时,才能继续运行,那么他就进入阻塞状态,如果同时有其他进程也要获得数据,他们会从运行队列中脱离出来进入等待队列中,知道获取数据。阻塞就是暂停,直到某个条件达成后再继续运行。

等待队列的进程处于阻塞状态,阻塞队列有n个,运行队列只能有一个(1个cpu)

唤醒:就是从阻塞状态转为R态,重新进入运行队列。

挂起:数据暂时进入磁盘中

阻塞挂起:当操作系统内存严重不足时,处于等待队列的进程会把数据从内存加载到磁盘,只留下pcb。此时进程被挂起,当进程唤醒时。又从磁盘加载数据到内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

波奇学Linux:父子进程和进程状态 的相关文章

  • 即使 makefile 和源代码存在,为什么“Build Project”在 Eclipse Helios CDT 中显示为灰色?

    我无法构建我的项目 我在 Eclipse Helios 中创建了一个新的 CDT 项目 并告诉它使用现有的源代码和 makefile 这两者都正确显示在 Package 和 Project 视图中 然而 项目 菜单中的 构建全部 和 构建项
  • 在键盘热插拔上加载模块

    我正在尝试学习如何为 Linux 系统编写模块和驱动程序 类似于this https unix stackexchange com questions 120839 usb kernel module does not load on de
  • 是否可以找到哪个用户位于 localhost TCP 连接的另一端?

    这是一个编程问题 但它是 Linux Unix 特定的 如果我从本地主机获得 TCP 连接 是否有一种简单的方法可以告诉哪个用户在 C 程序内建立了连接而无需 shell 我知道这对于 Unix 域套接字来说并不太难 我已经知道远程 IP
  • 使用 C++ 输出字符串覆盖 Linux 终端上的最后一个字符串

    假设我有一个命令行程序 有没有办法让我说的时候 std cout lt lt stuff 如果我不做std cout lt lt n 在另一个之间std cout lt lt stuff 东西的另一个输出将覆盖同一行上的最后一个东西 清理行
  • xdotool 类型需要很长时间并导致整个桌面冻结

    我一直在使用xdotool type过去只能在快捷方式上输入耸肩xdotool type 这可行 但总是需要相当长的时间 并导致整个桌面冻结 完全冻结 而不仅仅是输入 几秒钟 不过并没有太打扰我 现在我需要一种方法来从文件中读取内容 对其进
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • 使用命令行将 MediaWiki 维基文本格式转换为 HTML

    我倾向于编写大量文档 因此 MediaWiki 格式对我来说很容易理解 而且比编写传统 HTML 节省了我很多时间 然而 我也写了一篇博客 发现一直从键盘切换到鼠标来输入正确的 HTML 标签会增加很多时间 我希望能够使用 Mediawik
  • 是否有可能在linux中找到包含特定文本的文件?

    考虑这种情况 我在文件夹 Example 下有很多文件 如果我需要找到一个包含特定短语 如 Class Example 的文件 我该如何使用 Linux shell 来做到这一点 linux中有类似 定位 的函数可以做到这一点吗 Thank
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder

随机推荐

  • 【UE】制作地月全息投影

    效果 步骤 1 在必应国际版上搜索 purlin noise 下载如下所示图片 再搜索 Earth Map 下载如下所示图片 再搜索 Moon 360 下载如下所示图片 这三张图片的资源链接如下 链接 https pan baidu com
  • python在车载电子测试方面的应用笔记【1】

    文章目录 在DataFrame中某列插入数据 并根据另一列查找是否存在某个字符串完全一样 在另一列插入对应数据的功能 删除DataFrame某列数据长度大于6的数据 使用 PyInstaller 打包成一个独立的 exe 文件 通过检索空格
  • 通过kubeadm方式安装k8s

    虚拟机最少是 2 core master内存最小3G node内存最小2G 要求的Docker版本是18 03 如果不是安装的docker ce 版本是过旧的 可以选择删除后重新安装 也可以重新创建一个虚拟机执行以下命令 简单方法 使用ma
  • Docker build 无法解析域名

    报错 Docker build 无法解析域名 报错 ERROR 2 12 RUN curl o etc yum repos d CentOS Base repo https mirrors aliyun com repo Centos 7
  • 安装 运行 gemmini 和chipyard

    安装gemmini 和chipyard过程 安装版本 chipyard 版本是1 8 1 gemmini版本0 7 0 tip 如果在base里安装conda lock觉得缓慢 可以新建新的环境时就指定安装conda lock conda
  • GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

    这章是接上一章 使用 RPC包 序列化中没有详细去讲 因为这一块需要看的和学习的地方很多 并且这一块是RPC中可以说是最重要的一块 也是性能的重要影响因子 今天这篇主要会讲其使用方式 文章目录 Protocol Buffers V3 背景以
  • GoLong的学习之路,进阶,微服务之使用,RPC包(包括源码分析)

    今天这篇是接上上篇RPC原理之后这篇是讲如何使用go本身自带的标准库RPC 这篇篇幅会比较短 重点在于上一章对的补充 文章目录 RPC包的概念 使用RPC包 服务器代码分析 如何实现的 总结 Server还提供了两个注册服务的方法
  • 车载以太网笔记

    文章目录 以太网协议分层 协议 中间设备 子网掩码 物理层 测试 内容比较杂 后续会整理 以太网协议分层 协议 中间设备
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)

    WebAppDbTest 项目准备 项目准备 1 net cli 创建项目 2 nuget 包引用和项目结构 2 1 项目添加相关 nuget 包 2 2 WebAppDbTest 项目结构 3 项目代码说明
  • ETL.NET 助力海量数据轻松处理

    ETL NET 助力海量数据轻松处理 什么是 ETL EtlT About ETL About EtlT 谈谈 ETL 作用 ETL 对企业的作用 ETL 对个人职业发展的作用 ETL NET 介绍
  • 一篇能让你彻底搞明白前复权、后复权、不复权的好文

    当我们打开炒股软件看K线走势图时 点击鼠标右键会看到有前复权 后复权 不复权三种模式形态 有的股票三种模式下形态差别很大 选错模式 甚至有的股票用不复权处在底部 用前复权处在顶部 股票位置的高低都分不清 又怎么能选好股票呢 今天用最容易理解
  • 让同事高血压的8个Bug操作集锦

    来源 juejin cn post 7222676935147651132 前言 案例一 案例二 案例三 案例四 案例五 案例六 案例七 案例八 前言 本文的选题来源于一周前我的一次崩溃 当时各种压
  • 机器翻译:跨越语言边界的智能大使

    导言 机器翻译作为人工智能领域的瑰宝 正在以前所未有的速度和精度 为全球沟通拓展新的可能性 本文将深入研究机器翻译的技术原理 应用场景以及对语言交流未来的影响 1 简介 机器翻译是一项致力于通过计算机自动将一种语言的文本翻译成另一种语言的技
  • 【UE 材质】任务目标点效果

    效果 步骤 1 新建一个工程 创建一个Basic关卡 2 新建一个材质 这里命名为 M GoalPoint 打开 M GoalPoint 设置混合模式为 半透明 勾选 双面 在材质图表中添加如下节点 此时预览效果如下 继续添加如下节点 此时
  • 外贸行业怎么跟进客户?

    外贸行业怎么跟进客户 建立一个完善的跟进系统需要人性化关怀和高效的技术支持 人性化关怀 是指以客户为中心 关注客户的需求和情感 建立真诚 个性化的关系 高效的技术支持 则是指利用技术和工具来提高跟进效率和服务质量 也就是我们接下来要重点介绍
  • 期末备考 |《现代控制理论》期末备考资料包来啦!

    写在前面 不知不觉又到了学期的末尾 不知道各位计算机er的 专业课复习得怎么样了呢 为了帮助大家更好地 备战期末 从今天开始 岛主将持续为大家更新 计算机期末备考资料 为同学们的绩点护航 今天岛主为大家带来的是 现代控制理论 期末备考资料包
  • java 生成 UUID

    java 生成 UUID 1 生成 UUID import cn hutool core util IdUtil public class IdUtilTest public static void main String args 获取随
  • 大语言模型:开启自然语言处理新纪元

    导言 大语言模型 如GPT 3 Generative Pre trained Transformer 3 标志着自然语言处理领域取得的一项重大突破 本文将深入研究大语言模型的基本原理 应用领域以及对未来的影响 1 简介 大语言模型是基于深度
  • 数据库基础知识

    一 数据库 1 数据库分类 关系型数据库 RDMS最常用 以数据表为核心 非关系型数据库 不存在表的概念 2 常见数据库 Oracle 适用于项目结构庞大的数据库 例如 银行 电信等 MariaDB 与MySQL同源 起源于同一个团队 SQ
  • 波奇学Linux:父子进程和进程状态

    vim编辑器 编写一个程序模拟进程 在vim中查看sleep函数 底行模式输入 写个Makefile自动运行 波奇学Linux yum和vim CSDN博客 运行程序 PID和PPID 查看进程目录信息 实际有过滤出来有两个 一个进程本身一