学习记录第二十七天
进程
wait函数
功能
- 等待子进程结束:父进程调用
wait
函数后,会暂停执行,直到它的某个子进程结束。 - 收集子进程状态:当子进程结束时,
wait
函数会返回子进程的终止状态,包括是正常终止还是被信号终止等信息。
wait
函数的基本原型如下:
#include <sys/types.h> |
#include <sys/wait.h> |
pid_t wait(int *status); |
参数:status
是一个指向整数的指针,用来存储子进程的退出状态。如果不需要这个状态,可以传入NULL
。- 返回值:成功时,返回结束的子进程的PID;出错时,返回-1,并设置errno以指示错误。
注意事项
wait
函数只等待一个子进程结束,如果有多个子进程,它会返回最先结束的那个子进程的PID。- 如果所有子进程都已经结束,
wait
函数会立即返回-1,并设置errno为ECHILD
。 - 为了避免僵尸进程(已结束但父进程未通过
wait
等函数回收其资源的子进程),父进程应该及时调用wait
或相关函数来回收子进程资源。 - 在多线程程序中,使用
wait
函数可能需要考虑线程同步问题,因为wait
函数会阻塞调用它的线程。
waitpid
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
参数说明
-
pid:指定要等待的子进程的PID。它有几个特殊的值:
> 0
:等待指定PID的子进程。0
:等待与调用进程属于同一进程组的任何子进程。-1
:等待任何子进程,与wait
函数相似。< -1
:等待其组ID等于pid的绝对值的任何子进程。
-
status:用于存储子进程的退出状态。如果不需要,可以设置为
NULL
。 -
options:控制
waitpid
的行为。它可以是0,表示默认行为(阻塞等待),或者使用以下选项的组合(通过|
运算符连接):WNOHANG
:非阻塞模式。如果指定的子进程没有结束,则返回0而不是阻塞等待。WUNTRACED
:报告子进程的停止状态(比如,被信号暂停)。WCONTINUED
:如果子进程因为被SIGCONT信号唤醒而产生了SIGCHLD信号,则立即返回。
返回值
- 成功时,返回结束的子进程的PID。
- 如果设置了
WNOHANG
且没有子进程结束,则返回0。 - 出错时,返回-1,并设置errno以指示错误。
非阻塞和阻塞
阻塞:会阻塞父进程处理逻辑
非阻塞:父进程会去查看子进程状态改变,但是 如果没有发生改变,父进程不阻塞,整个程序继续往下。非阻塞必须套在循环中处理
线程
线程是计算机科学中的基本概念,指的是在一个进程中执行的独立指令流。以下是对线程的详细解释:
一、定义与特性
- 定义:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程并行执行不同的任务。
- 特性:
- 独立调度和分派的基本单位:在多线程操作系统中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。
- 可并发执行:一个进程中的多个线程可以并发执行,甚至允许在一个进程中所有线程都能并发执行,同时,不同进程中的线程也能并发执行。
- 共享进程资源:同一进程中的各个线程都可以共享该进程所拥有的资源,如内存空间、文件句柄等,但每个线程又有自己的独立执行流和调用栈。
二、组成与结构
- 线程由线程标识符、程序计数器、寄存器集合和堆栈组成。其中,线程标识符用于唯一标识一个线程;程序计数器用于指示线程当前执行的指令地址;寄存器集合用于存储线程执行过程中需要的各种数据;堆栈则用于存储线程调用函数时的局部变量和返回地址等。
三.为什么需要线程?
线程 --- 轻量级的进程
进程 --- 重量级的进程
线程 成为 CPU执行的最小单位
进程 成为 资源分配的基本单位
线程
创建 和 调度 时空开销都比进程小
四. 线程与进程的关系
a.线程 是 存在于 进程中的
b.线程 共享了进程的资源 (代码段,数据段,打开一些文件,信号等)
c.线程结束,不一定导致进程结束
五.线程的编程
类似与进程过程
线程函数
Red hat / IBM
//thinkpad
ubuntu
contos //服务器上 --- linux系统运维
red hat 实现的一套线程函数 //NPTL线程库
NPTL (New Posix Thread Library)
a.线程的创建
pthread_create
int pthread_create(pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine) (void *),
void *arg);
功能:该函数可以创建指定的一个线程。
参数:
@thread 线程id,需要实现定义并由该函数返回。
@attr 线程属性,一般是NULL,表示默认属性。(可结合性+分离属性)
默认(可结合性) -- 自己手动回收
分离属性 -- 系统自动回收
@start_routine -- 线程执行函数 (线程回调函数)
//指向[指针函数的] 函数指针。
本质上是一个函数的名称即可。
称为
th 回调函数,是线程的执行空间。
{
}
//注: 线程回调函数 --完成线程任务功能的函数
// 需要调用者 自己实现
@arg 回调函数的参数,即参数3的指针函数参数。
返回值:成功 0
失败 错误码
获得线程tid:
pthread_self(); //在那个线程中调用,获得的就是那个线程的tid
b.线程的执行
就体现在线程的 执行函数(回调函数)上
c.线程的退出
方式1
pthread_exit
void pthread_exit(void *retval)
功能:
结束调用的线程
参数:
@retval //退出状态值 //传的是,退出状态值 对应的地址
注意:
1.pthread_exit 本身表示结束线程 如果用在main函数中 表示结束主线程 主线程结束 并不表示程 此时,主线程执行流结束,进程会在其余线程都结束后,结束
d.线程的资源回收
int pthread_join(pthread_t thread, void **retval);
功能:
等待线程结束
参数:
@thread --- 线程tid
@retval --- 用来保存,退出状态值,所在空间的地址
返回值:
成功 0
失败 错误码
注:
线程退出时,可以带出退出状态值,但是传的是,退出状态值对应空间的地址
相关文章:

学习记录第二十七天
进程 wait函数 功能 等待子进程结束:父进程调用wait函数后,会暂停执行,直到它的某个子进程结束。收集子进程状态:当子进程结束时,wait函数会返回子进程的终止状态,包括是正常终止还是被信号终止等信息。…...

servlet的执行顺序
执行的时候Tomcat先初始化 然后调用 server 根据server来回调请求方式下面会追入源码解释 package com.haogu.servlet;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.…...
Go语言 类封装和绑定方法
本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。 目录 封装 绑定方法 类方法形参 指针形参 设置类方法参数 指针与非指针区别 总结 封装 go语言支持类的操作,但是没有class关键字,使用struct来模拟类。 示例如下&am…...
DirectShow过滤器开发-写WAV音频文件过滤器
下载本过滤器DLL 本过滤器将PCM音频流,或ADPCM,IEEE_FLOAT,ALAW,MULAW,GSM610音频流写入WAV音频文件。 写WAV音频文件过滤器信息 过滤器名称:写WAV 过滤器GUID:{CF704A9C-0C67-4712-BA33-DD0A…...

php根据截止时间计算剩余的时间,并且在剩余时间不足1天时仅显示小时数
//获取政策库文章public function getIndexZckList(){$fl_id = input(fl_id);if(empty(...
Docker最佳实践进阶(一):Dockerfile介绍使用
大家好,上一个系列我们使用docker安装了一系列的基础服务,但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间,更是容易遗忘,下面我们进行Docker的进阶教程,帮助我们更快速的部署和演示项目。 一、什么是Dockerfile? Dockerfile 是一个文本文件,其中包含了…...

Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术
人工智能咨询培训老师叶梓 转载标明出处 现实世界的视频捕获虽然因其真实性而宝贵,但常常受限于长尾分布的问题,即常见场景过度呈现,而关键的罕见场景却鲜有记录。这导致了所谓的"分布外问题",在模拟复杂环境光线、几何…...
安卓开发中的AppCompat框架|安卓系统|安卓应用|兼容性|UI组件|核心组件|ActionBar|Fragment|最佳实践|框架|移动开发|移动应用
目录 1. 什么是AppCompat框架 1.1 AppCompat的起源 1.2 AppCompat的重要性 2. AppCompat框架的核心组件 2.1 AppCompatActivity 2.2 AppCompat主题 2.3 AppCompat Widgets 3. 在项目中使用AppCompat框架 3.1 添加依赖项 3.2 应用AppCompat主题 4. AppCompat的高级功…...

React使用useRef ts 报错
最近在写自己的React项目,我在使用useRef钩子函数的时候发现 TS2322: Type MutableRefObject<HTMLDivElement | undefined> is not assignable to type LegacyRef<HTMLDivElement> | undefined Type MutableRefObject<HTMLDivElement | undefined&g…...
python-信息交互-pyautogui
python-信息交互-pyautogui 一: pyautogui1> waht?2> 功能分类3> 概念及作用二: 通用功能1> function all2> function 注释三: 鼠标控制1> mouse functions2> mouse functions demo3> mouse drag demo四: keyboard控制1> keyboard functions2> …...

flink1.18 编译遇到的问题
1. flink-runtime-web编译失败 源码编译时一直卡在 [INFO] Running ‘npm ci --cache-max0 --no-save’ in 处理方法: 修改flink-runtime-web/pom.xml文件 将<arguments>ci --cache-max0 --no-save ${npm.proxy}</arguments> 替换为:<a…...
2024年8月份编译Openwrt系统基础
概述: 本文档记录openwrt系统的编译过程,以备后续再用,技术支持与指导! 1.编译环境 环境需要Linux,我使用的环境是WSL2、Ubuntu 20.04 2.安装编译必须的依赖(wsl、linux) WSL2:Bu…...

Vue3+vite+ts 项目使用mockjs
1、安装mockjs npm i mockjs 2、安装vite-plugin-mock npm i vite-plugin-mock -D 3、安装axios npm i axios 4.在src目录下创建mock文件夹,在文件夹内创建login.ts等文件,并在文件夹内放置以下内容(注:URL要和真实请求地址保持一致&am…...

动态规划(二)——例题
目录 Help Jimmy 题目 解题思路 神奇的口袋 题目 枚举的解法 递归的解法 动态规划的解法 滑雪 题目 解题思路 解法一 解法二 Help Jimmy 题目 "Help Jimmy" 是在下图所示的场景上完成的游戏: 场景中包括多个长度和高度各不相同的平台。地面是…...
Node.js中判断是文件还是文件夹的多种方法
在Node.js中,我们经常需要判断一个路径是文件还是文件夹。Node.js提供了多种方法来实现这一功能,本文将详细介绍这些方法,并给出相应的示例代码。 一、使用fs.Stats对象 在Node.js中,fs模块提供了fs.stat()或fs.statSync()方法&…...
idea 如何打war包
idea 如何打war包 1.在IntelliJ IDEA中打包WAR文件,你可以按照以下步骤操作:1.设置项目结构:首先,打开IDEA,选择File>Project Structure(或使用快捷键CtrlAltShiftS)。在打开的窗口中,选择 Artifacts 选项 2.添加Web Applicat…...
米联客-FPGA程序设计Verilog语法入门篇连载-15 Verilog语法_跨时钟域设计
软件版本:无 操作系统:WIN10 64bit 硬件平台:适用所有系列FPGA 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述 本小节主要讲解Verilog语法的…...
gradio 对话界面实现支持图片、视频正常显示
参考: https://www.gradio.app/docs/gradio/chatbot 问题: gradio网页输出视频nan;图片webp显示不出来 解决方法:需要通过gradio的Video、Image包装 代码: 这里下面启动个后端vlm模型(参考:https://blog.csdn.net/weixin_42357472/article/details/141126225),前端通…...

催收业务怎么提高接通率
提高催收呼叫业务的接通率是一个综合性的任务,需要从多个方面进行优化。以下是一些具体的策略和建议: 一、优化呼叫时间与频次 1. 选择合适的呼叫时间:通过分析目标客户的活跃时段,选择他们最可能接听电话的时间进行呼叫…...
动态生成sitemaps和robots.txt文件:提升SEO与网站可爬性
本文由 ChatMoney团队出品 在现代Web开发中,搜索引擎优化(SEO)是网站成功的关键因素之一。搜索引擎通过网络爬虫来索引网页,而sitemaps和robots.txt文件则是帮助这些爬虫更好地理解和索引网站内容的重要工具。 sitemaps简介 Sit…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...