初探进程和线程

2023-05-16

初探进程和线程

之前学习过RTOS,对线程有一些认识和理解,但接触到Linux后还遇到了进程这个概念,虽然两者之间名字很相像,但其实是完全不同的两个概念。

进程包含一个内存地址和执行的线程,地址空间是进程私有的。当程序运行时,进程会为其分配资源,进程结束时,这些资源会被回收。进程之间通过IPC进行交互。线程时进程中的一条执行路径,同一个进程中的线程在同一地址空间中执行,它们彼此共享资源。

进程

进程包含线程可以运行的环境:包括内存映射、文件描述符、用户ID等。

创建进程

第一个进程是 init 进程,创建进程的 POSIX 函数是 fork( ) 。

frok 函数调用成功后有两个返回值,在子进程中返回值为0,在父进程中返回值大于0(即子进程的PID),当返回值为负时,代表调用失败。

运行不同的程序

fork 函数创建的是程序的一个副本,需要 exec 函数运行不同的程序。如果调用成功,内核将丢弃当前进程的所有资源,并将内存分配给正在加载的新程序。

进程间通信

有两种方式在进程之间传递消息。第一,将消息从一个地址空间复制到另一个地址空间(例如:FIFO,套接字和消息队列);第二,创建一个进程都可以访问的内存区域(例如:POSIX 共享内存)。

终止进程

进程可以调用 exit ( ) 自动退出,或通过接收特定信号强制退出(例如 SIGKILL 信号)。

进程终止时会有一个返回值,当进程正常终止时,返回值就是 exit 函数的参数;当是以 kill 方式终止时,返回值就是接收到信号的编号。0 表示成功,其他值表示失败。

父进程可以通过 wait( ) 或 waitpid( ) 收集返回值。如果父进程没收到返回值,将无法创建新进程。

线程

创建线程

通过函数 pthread_create( ) 创建线程, TID 为线程标识。

一个多线程进程调用 fork( ) 创建的子进程中只有调用 fork( ) 的线程,不复制所有的线程。

线程间通信

同一个进程中的线程是共享地址空间的,可以共享内存变量,不过需要通过条件变量和互斥等进行保护同步机制,而RTOS中的信号量、互斥量等就是此基础上更复杂的结构。

终止线程

线程内带调用 pthread_exit( ) ;被另一个线程调用 pthread_cancle( ) ;包含该线程的进程终止。

可以看出,线程是被包含在进程中的,不同的进程具有不同的资源,而同一进程中的不同线程是共享资源的。在 Android 中,每个应用程序就是一个独立的进程,这有利于模块化存储管理。对于多核处理器,线程又提供了并行机制。

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

初探进程和线程 的相关文章

  • Python 迭代器 与 异常处理

    文章目录 迭代介绍可迭代对象迭代器对象迭代器对象取值 方法的简写for循环内部原理异常处理异常的分类异常的类型异常的处理try except 语句try except else 语句try except finally 语句try exce
  • linux系统进程 exec函数族的使用(fork之后)

    1 2 exec 函数族 头文件 unistd h 3 exec 函数可用在fork 函数之后 xff0c 直接执行一个程序而省略子进程复制父进程的资源 4 调用exec不会创建一个新的pid 5 6 path xff1a 可执行文件的路径
  • Collecting package metadata (current_repodata.json): failed的问题解决

    解决方法 1 删除 condarc文件 2 关闭VPN 3 https的锅 xff0c 详情看下面的博客 环境配置 Collecting package metadata current repodata json failed的问题解决
  • 作业1:CAN数据库配置(DBC)

    目录 一 首先如何创建dbc文件 二 创建 三 创建节点NODE 一 其它 xff08 共1题 xff0c 100分 xff09 1 其它 使用vector candb editor软件 xff0c 按给定的信号矩阵配置CAN xff0c
  • Visual Studio 2022 C++下载及配置

    下载地址 xff1a https visualstudio microsoft com zh hans vs 之后点击右下角的安装 xff1b 如果下载速度一直为0 xff0c 那么解决方法为 xff1a 修改电脑的DNS服务器地址为8 8
  • app测试和web测试的区别

    1 功能方面 xff1a 在流程和功能测试上是没有区别的 xff0c 系统测试和一些细节可能会不一样 那么我们就要先来了解 xff0c web和app的区别 xff1a web项目 xff0c 一般都是b s架构 xff0c 基于浏览器的
  • Java网络编程实现

    前言 计算机网路实现了多个网络终端的互联 xff0c 彼此之间能够进行数据交流 而网络应用程序就是在已连接的不同终端设备上运行的程序 xff0c 这些网络程序相互之间可以进行数据交互 网络程序的数据交互则依赖于TCP IP协议 xff0c
  • java对象转JSONObject、JSONObject转java对象及String转JSONObject

    JSONObject jo 61 JSONObject JSONObject toJSON javaBean Student stu 61 JSONObject parseObject jo Student class JSONObject
  • redis设置密码

    设置密码有两种方式 1 命令行设置密码 运行cmd切换到redis根目录 xff0c 先启动服务端 gt redis server exe 另开一个cmd切换到redis根目录 xff0c 启动客户端 gt redis cli exe h
  • 【Java】Java四舍五入保留1位小数、2位小数

    方法一 xff1a 使用字符串格式化实现四舍五入 支持float和double类型 double data 61 3 02 利用字符串格式化的方式实现四舍五入 保留1位小数 String result 61 String format 34
  • ROS: [xxx.launch] is neither a launch file in package

    在ROS执行launch文件的过程中 xff0c 我经常碰见这个问题 xff0c 比如最近在安装ARBOTIX仿真器的时候 sudo apt get install ros indigo arbotix rospack profile 安装
  • SpringBoot文件上传

    文件上传 Spring MVC对文件上传做了简化 xff0c 在Spring Boot中对此做了更进一步的简化 xff0c 文件上传更为方便 Java中的文件上传一共涉及两个组件 xff0c 一个是CommonsMultipartResol
  • Django-图书管理系统(含源码)

    前段时间翻文件发现了以前学习python和django时做的一个系统 xff0c 当时的想法是将这玩意做出来应付web开发大作业 课程设计作业甚至是毕设用的 xff0c 实际上也确实应付了课程设计 xff0c 功能虽然不算多 xff0c 但
  • Android Studio 实现登录注册-源代码 (连接MySql数据库)

    Android Studio 实现登录注册 源代码 xff08 连接MySql数据库 xff09 Android Studio 实现登录注册 源代码 二 xff08 Servlet 43 连接MySql数据库 xff09 Android S
  • MySQL8重置root账户密码图文教程

    root账户为MySQL的超级管理员用户 xff0c 拥有MySQL提供的所有权限 我们登录了root账户可以重置其它创建的所有用户的密码 xff0c 那么root账户的密码忘记了怎么办呢 xff1f 由于版本和安装环境的不同 xff0c
  • docker执行权限问题Got permission denied while trying to connect to the Docker daemon socket

    安装docker之后 xff0c 执行docker images等命令 xff0c 提示权限问题 xff0c 报错如下 xff1a Got permission denied while trying to connect to the D
  • @ServletComponentScan和@ComponentScan 注解

    springboot 项目启动类中我们经常见到这两个注解 64 ServletComponentScan和 64 ComponentScan 下面我们就言简意赅的介绍一下这两个注解的作用 一 64 ServletComponentScan
  • MySQL中使用序列-Sequence

    在Oracle数据库中若想要一个连续的自增的数据类型的值 xff0c 可以通过创建一个sequence来实现 而在MySQL数据库中并没有sequence 通常如果一个表只需要一个自增的列 xff0c 那么我们可以使用MySQL的auto
  • SpringMVC获取请求参数

    CSDN话题挑战赛第1期 活动详情地址 https marketing csdn net p bb5081d88a77db8d6ef45bb7b6ef3d7f 大家好 我是郭尕 SpringMVC获取请求参数 一 前言 二 通过控制器方法的
  • 搞定Redis(三)消息的发布、订阅和新增数据类型

    一 Redis的发布和订阅 1 什么是发布和订阅 Redis 发布订阅 pub sub 是一种消息通信模式 xff1a 发送者 pub 发送消息 xff0c 订阅者 sub 接收消息 Redis 客户端可以订阅任意数量的频道 2 Redis

随机推荐

  • 智能控制——模糊数学及控制

    一 模糊控制概况 模糊逻辑控制 Fuzzy Logic Control 简称模糊控制 Fuzzy Control xff0c 是以模糊集合论 模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制技术 1965年 xff0c 美国的L A Z
  • CMakeList 将CPP代码编译成可执行文件示例

    一 本次编译 CMakeList中用到的语法详解 1 设置cmake 版本 xff1a cmake minimum required VERSION 3 5 2 set the project name project Agent Test
  • STM32 IO口模拟串口

    红叶何时落水 什么是串口呢 xff1f 简单来说它是一种通信协议 xff1b 串口是一个泛称 xff0c UART TTL RS232 RS485都遵循类似的通信时序协议 xff0c 因此都被通称为串口 而对于单片机来说 xff0c 串口通
  • python学习:最适合初学者的8本Python书籍

    Python是最友好的编程语言之一 xff0c 也因此成为初学者的首选 xff0c 为了帮助你更好更快的上手Python xff0c 并学会使用Python进行编程 xff0c 本文我们为初学者分享了最好的Python书籍 希望能够对你有所
  • 最适合Python入门到大牛必看的7本书籍,一定要收藏!

    Python零基础应该阅读哪些书籍 xff1f 我推荐这三本书 1 Python学习手册 xff08 第4版 xff09 以计算机科学家一样的思维方式来理解Python语言编程 xff0c 实用的学习指南 xff0c 适合没有Python编
  • 电脑可以上网,但是仍然显示无网络连接

    不知道是否因为win11的正式发布 xff0c 催促着win10的更新 xff0c 而在更新中对于部分用户的电脑产生了bug xff1a 目前被证实为win10 1607版本后 xff0c URL变动引起的 在我们使用WLAN连接方式时 x
  • 阿里云云平台,物联网可视化web界面简单教程

    目前市面上的云平台 xff0c 多以华为 xff0c 阿里 xff0c 中国移动为主 但是了解一个 xff0c 便可满足需求了 1 首先 xff0c 我们要创建一个属于自己的账号 xff0c 然后尽可能的领取各种限免套餐 2 打开产品这一栏
  • LCD屏幕 ~ 字模提取工具和图片转码工具

    目录 字模提取 工具资源下载 xff1a 图片转码 工具资源下载 xff1a 字模提取 工具资源下载 xff1a 链接 xff1a https pan baidu com s 1BF8lJLmM V vWrl2F6Cd7Q pwd 61 m
  • (练习篇)萤火虫esp32与小爱音响---实现笔记本电脑唤醒

    目录 初步工作 xff1a 进入正题 xff1a 初步工作 xff1a xff08 已使用过ESP32的同志们 xff0c 可以忽略这一步 xff09 首先下载arduinoIDE Software Arduino 我安装的是1 8 18直
  • Python:列表有趣挑战--斗地主扑克牌发牌

    目录 游戏描述 xff1a 题目分析与关键点 xff1a 代码参考 xff1a 游戏描述 xff1a 本题限定用以下方法打乱序列中的元素 random shuffle 几个人用一副扑克牌玩游戏 xff0c 游戏过程通常有洗牌 发牌 理牌等动
  • Python: 常用指令归纳(持续更新中)

    目录 复合赋值运算符 位运算符的运算规则 常用的转义符 常用字符串格式转换控制符 字符串处理函数 序列类型的常用操作符 复合赋值运算符 复合赋值运算符 运 算 符功 能 描 述 示 例 x 61 5 xff0c y 61 3 43 61 加
  • 无线远距离WiFi模块图传技术,无人机智能安防预警应用

    随着社会经济的快速发展 xff0c 交通工具日渐增多 xff0c 人员 车辆流动性大 xff0c 警车 警员在执法过程中对移动目标 突发场合的信息收集与现场预警 xff0c 当场发现嫌疑目标并进行抓捕已成为公安警务工作的紧迫需求 从警务执法
  • yolov5输出检测框的中心位置,框的长宽,框的位置,以及输出对应标签格式的输出

    yolov5输出检测框的中心位置 xff0c 框的长宽 xff0c 框的位置 xff0c 以及输出对应标签格式的输出 模型读取每个图片 xff0c 并将上述的信息依此输出到同名的txt文件中保存 xff0c 具体需要哪些坐标可以自己选 更改
  • 无人机远距离WiFi图传应用,CV5200无线WiFi模组,远程实时通信传输方案

    无线图传在实际应用中越来越受到追捧 xff0c 无线图传免布线 移动方便 安装简单 xff0c 大大节约了材料和人工成本 无线图传能够在远距离范围内实时视频无线传输 xff0c 满足了不同距离需要的需求 xff0c 也覆盖了不同规模的企业
  • antd表单赋值,回显表格数据

    使用 antd 做表格回显数据时 xff0c 会看到文档有写 xff1a 所以我们可以 1 定义hooks const form 61 Form useForm 2 在触发事件中使用 xff0c 以打开模态框赋值为例 const showM
  • jetson nano jacksdk4.6中cuda,cudnn,tensorrt的版本查看

    JetPack 4 6上已经预装了CUDA cuDNN and TensorRT VPI 1 1 可以直接从官网下载 xff08 jetson sdk xff09 使用拷贝到SD卡 JetPack 4 6 is the latest pro
  • 无人船毕设进展

    智能无人测量船设计进展 xff08 硬件系统 xff09 目录前言课题目的研究现状控制系统 xff08 Pixhawk xff09 动力系统供电系统通讯系统传感器系统pixhawk2 4 8接口分析控制系统详细分析技术路线参考文献 目录 前
  • OpenMV:20追踪其他物体的云台

    文章目录 追踪人脸的云台追踪AprilTags的云台追踪圆形的云台 和追踪小车的原理是一样的 首先获得目标物体的x y坐标 xff0c 然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动 无论追踪什么物体 xff0c 都是通过物
  • 如何在Linux终端使用录屏工具Asciinema?

    安装asciinema apt get install asciinema 开始记录视频 asciinema rec first cast 以倍速重播 asciinema play s 2 first cast 分享或上传至网络 ascii
  • 初探进程和线程

    初探进程和线程 之前学习过RTOS xff0c 对线程有一些认识和理解 xff0c 但接触到Linux后还遇到了进程这个概念 xff0c 虽然两者之间名字很相像 xff0c 但其实是完全不同的两个概念 进程包含一个内存地址和执行的线程 xf