Linux 进程概念 进程状态 fock函数讲解

在这里插入图片描述





PID和PPID


我如果想获取自己的PID呢?

pid_t  getpid(void);

头文件:#include<sys/types.h> #include<unistd.h>

返回调用这个函数的进程ID(自己的PID)

PID一般会变化


如何获取PPID?

pid_t  getppid(void);(父ID)

头文件:#include<sys/types.h> #include<unistd.h>

返回调用这个函数的进程ID(自己的PPID)

PPID在一次登录中不会变化


通过系统调用创建进程-fork初始


fork函数的调用

fork的英文名为分叉,

返回值:

子进程返回值为0,父进程返回子进程的PID


示例代码:

int main()
{printf("before:only one line\n");fork();printf("after:only one line\n");//fork()之后的代码会被执行两次//fork之前有一个执行流,fork之后就会变成两个进程
}

如何验证?


int main()
{pid_t id = fork();if (id == 0){while (1){printf("我是子进程,pid= %d,ppid= $d\n", getpid(), getppid());sleep(1);}}else if (id > 0){while (1){printf("我是父进程,pid= %d,ppid= $d\n", getpid(), getppid());sleep(1);}}else{//error}
}

运行结果

说明fork创建了父子进程,并且fock之后父子进程的代码是共享的
在这里插入图片描述

创建子进程

1.创建子进程PCB
2.填充PCB对应的内容
3.让子进程和父进程指向同样的代码
4.父子进程都是有独立的task_struct,可以被CPU调度运行。


fork的常见问题

  • 为什么fork要返回两个值;也就是说为什么子进程返回值为0,父进程返回子进程的PID?

返回不同的返回值是为了区分让不同的执行流,执行不同的代码块
为什么父进程返回子进程的PID:想要通过父进程要明确控制的是哪一个子进程

  • 一个函数是如何做到返回两次的?如何理解?

return 语句也是代码,所以return语句就被父子共享,所以父进程在执行时返回一次,子进程在执行时返回一次,所以最后就被反悔了两次。

  • 一个变量怎么会有不同的值?如何理解?
  1. 这里要引入一个概念:几乎在任何平台,进程在运行的时候,是具有独立性的。
  2. 所有有了独立性,父子进程就绝对不能访问同一份数据,因为数据可能被修改,所以不能让父子进程共享同一份数据。但是之前说父子进程代码是共享的,该怎么理解?共享代码并不影响独立性。
    当子进程要修改父进程数据时,操作系统就会给子进程开辟一款新空间,让子进程来使用,不影响父进程的数据,但是不修改时,就不会开辟。这叫做:数据层面的写时拷贝
  • 为什么要创建子进程?

为了让父和子进程执行不同的代码块。所以让fock具有了不同的返回值。

  • 如何父子进程被创建,往后是谁先运行呢?

谁先运行,有调度器决定,谁先运行是不确定的。


进程状态


运行状态

  1. 运行队列

多个进程由双链表维护,当操作系统找到整个队列的头部head,我们就能调度某个进程,把这个进程的代码和数据放在CPU上运行。可是进程是相当多的,但是CPU只有一个,所以进程就会竞争CPU资源。所以每个进程都会维护一个运行队列。里面包含了struct task_struct *head;和 struct task_struct *tail;到了谁就去执行谁。凡是处于运行队列的进程,他们所处状态叫做运行态或者R状态(我已经准备好了,随时可以被调度的状态)

  1. 一个进程只要把自己放到CPU上开始运行了是不是就一直要执行完毕,才把自己放下来?

不是的。每个进程都有一个叫做:时间片(10ms)的概念,当当前进程运行超过某个时间段(比如说10ms左右),就会重新放到队列尾部重新排队。放上去,拿下来的操作,这叫做进程切换。在一个时间段内,所有进程代码都会被执行,这叫做并发执行

阻塞状态

  • 什么叫做阻塞状态?

如果某个进程要从键盘读取数据,当要输入数据时,我们故意不输入任何数据时,此时进程会一直等待输入。所以这个进程就不在运行队列中,而是在等待队列中,去等待键盘的输入。所以当某个进程要读取数据,但是却不输入数据,会在等待队列中等待,我们把这种等待某种特定设备的这种进程,称之为该进程处于阻塞状态。

  • 操作系统如何管理各种硬件?

先描述 再组织

挂起状态

  • 什么叫做挂起

假设现在有一个磁盘,此时进程处于阻塞状态等待时,突然在等待时,如果操作系统的内存资源严重不足了,操作系统就得保证正常的情况,就要腾出内存资源,此时操作系统就会将进程的PCD继续保留在内存中,代码数据保存到外设磁盘中这个过程叫换出这个状态称为阻塞挂起状态。等有数据输入时,操作系统又会将保存在磁盘中的代码数据重新迁移到内存中这个过程叫换入


常见问题

  • 运行队列和等待队列在哪里?

全部在内存当中。在内存的任意位置。

  • 主动运行一个进程,是在排队等待呢?还是直接运行呢?

大概率是需要等待,但是CPU速度非常快,我们几乎感觉不到等待。

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

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

相关文章

提高 Web 应用程序安全性的标准

开放式 Web 应用程序安全项目 (OWASP) 是一个国际非营利组织&#xff0c;致力于为任何有兴趣提高 Web 应用程序安全性的人提供免费文档、工具、视频和论坛。 OWASP 最初成立为开放式 Web 应用程序安全项目&#xff0c;并于 2004 年注册为非营利性慈善机构&#xff0c;提供有关…

redis学习(011 实战:黑马点评:优惠券秒杀:redis实现全局唯一ID)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第48p-第p49的内容 文章目录 全局唯一ID编码 全局唯一ID //String did dao.haveKeyId(“deputybedthing”); 这里的主键并没有…

LeetCode—string练习

415.字符串相加 . - 力扣&#xff08;LeetCode&#xff09; 错误示范&#xff1a; 遇到这种我们第一想法就是将字符串转化成整数&#xff0c;但这种解法无法提交通过&#xff0c;只能支持将小数字互相转化&#xff0c;遇到较长的字符串就没法通过。 class Solution { public…

基于FPGA实现SD NAND FLASH的SPI协议读写

基于FPGA实现SD NAND FLASH的SPI协议读写 在此介绍的是使用FPGA实现SD NAND FLASH的读写操作&#xff0c;以雷龙发展提供的CS创世SD NAND FLASH样品为例&#xff0c;分别讲解电路连接、读写时序与仿真和实验结果。 目录 1 FLASH背景介绍 2 样品申请 3 电路结构与接口协议 …

基于微信小程序在线订餐系统

微信小程序在线订餐系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序在线订餐系统的开发全过程。通过分析微信小程序在线订餐系统管理的不足&#xff0c;创建了一个计算机管理微信小程序在线订…

免费下载Win11 24H2专业版!附详细安装教程

今日&#xff0c;系统之家小编给大家带来2024年最新的Windows11 24H2专业版系统&#xff0c;更新后系统版本号将升至26100.1591。系统基于微软官方最新Windows 11 24H2专业版进行离线制作与优化&#xff0c;确保系统安全无毒&#xff0c;兼容性强&#xff0c;可完美支持新老机型…

解锁高效项目管理:精选软件项目管理工具与技术实战

在当今快节奏的商业环境中&#xff0c;项目管理不仅是确保任务按时完成的手段&#xff0c;更是企业战略规划与执行的核心。面对日益复杂的项目需求和不断变化的市场环境&#xff0c;传统的手工管理方式已难以满足高效协同的要求。此时&#xff0c;项目管理软件作为数字化时代的…

【数据推荐】我国省市县三级的人口受教育状况数据(分年龄\性别\户籍)

人口数据是我们在各项研究中都经常使用的数据。之前我们为大家分享过基于《2020中国人口普查分县资料》整理的全国范围的第七次人口普查人口数据&#xff0c;具体包括如下8个分表&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff1a; 表1&#xff1a;我国省市县三…

只会SQL语句,可以做什么工作?

1、SQL是什么 首先简单介绍一下SQL&#xff08;Structured Query Language&#xff09;&#xff0c;是一种可以进行数据提取、聚合、分析&#xff0c;并对数据库进行构建和修改的编程语言。 相对来说&#xff0c;SQL上手非常容易&#xff0c;因为语法结构比较固定&#xff0c…

iOS分渠道统计不再难,Xinstall帮你轻松搞定

在App推广和运营的过程中&#xff0c;iOS分渠道统计一直是一个令人头疼的问题。如何准确追踪各个渠道的推广效果&#xff1f;如何优化投放策略以提高转化率&#xff1f;这些问题困扰着无数推广者。今天&#xff0c;我们就来聊聊Xinstall这款强大的分渠道统计工具&#xff0c;看…

llama_factory Qlora微调异常 No package metadata was found for The ‘autoawq‘

importlib.metadata.PackageNotFoundError: No package metadata was found for The ‘autoawq’ distribution was not found and is required by this application. To fix: pip install autoawq 其实问题比较简单 直接安装autoawq 即可 但是对应会有版本问题&#xff1a; 查…

什么是阿凡达2.0直播模式?

要了解什么是什么是阿凡达2.0直播模式,首先要了解什么是的阿凡达直播模式。 我们知道真人直播&#xff0c;播不了几个小时&#xff0c;主播就讲累了。且真人主播的价格又贵&#xff0c;以小时计费。所以很多数字人厂商推出了数字人直播。用数字人代替真人直播。在前几年的时候…

k8s的组件以及安装

目录 概念 k8s的使用场景 k8s的特点 核心组件 master主组件 1.kube-apiserver 2.etcd 3.kube-controller-manager 控制器 4.kube-scheduler node从节点组件 1.kubelet 2.kube-proxy 3.docker 总结 k8s的核心概念 安装k8s 架构 安装步骤 实验&#xff1a;创…

RabbitMQ中间件监控指标解读

监控易是一款全面的IT监控软件&#xff0c;能够实时监控各种IT资源和应用&#xff0c;确保系统的稳定运行。在RabbitMQ中间件的监控方面&#xff0c;监控易提供了详尽的监测指标&#xff0c;帮助用户深入了解RabbitMQ集群的运行状态和性能表现。 一、集群监控&#xff08;sdds…

【复旦微FM33 MCU 外设开发指南】外设篇3——SPI

前言 本系列基于复旦微FM33系列单片机的DataSheet编写&#xff0c;旨在提供一些开发指南。 本文章及本系列其他文章将持续更新&#xff0c;本系列其它文章请跳转【复旦微FM33 MCU 外设开发指南】总集篇 本文章最后更新日期&#xff1a;2024/08/31 文章目录 前言GPIO配置SPI配…

深度孤立森林 Deep Isolation Forest论文翻译(上)

README 绝大部分是自己翻译自己手打的&#xff0c;少部分参考有道翻译&#xff0c;主要是想仔细再读一遍&#xff0c;顺便就打出来了。这篇论文内容比较多&#xff0c;有代码&#xff0c;原作者有github和知乎账号&#xff0c;感兴趣可以找一下。欢迎讨论和批评指正。 用于异…

如何手动添加和修改Chrome浏览器的Cookies:一个简单的指南

一、打开Chrome浏览器,输入需要增加的cookie的网址 二、按 F12打开开发者控制台&#xff0c;点击 Application 三、在Storage里面可以选择Cookie&#xff0c;再点击网址进行添加需要的cookie

【职业选择】AI工程师、机器学习工程师和深度学习工程师的职责与工作内容有什么区别?

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

I2C软件模拟时序的基本要素

目录 前言 一、关于I2C 二、正文 1.引脚的配置 2.I2C的起始和终止时序 3.发送一个字节 4.接收一个字节 5.应答信号 6.指定地址写和指定地址读 总结 前言 环境&#xff1a; 芯片&#xff1a;STM32F103C8T6 Keil&#xff1a;V5.24.2.0 本文主要参考江科大教程&#…

Centos Stream9系统安装及网络配置详解

1.镜像下载 如未拥有系统镜像文件的伙伴可通过前往下面的连接进行下载&#xff0c;下载完成后需将其刻录至U盘中。 PS&#xff1a;该U盘应为空盘&#xff0c;刻录文件会导该盘格式化&#xff0c;下载文件选择dvd1.iso完整包&#xff0c;适用于本地安装。 下载地址&#xff1…