十四、Linux线程(一)

1.守护进程

1.守护进程的特点

是后台服务进程

独立于控制终端

周期性执行某任务

不受用户登录注销影响

一般采用以d结尾的名字(服务)

2.进程组

进程的组长:

        组里边的第一进程

        进程组的ID==进程中的组长的ID

进程中组长的选择:

        进程中的第一个进程

进程组ID的设定:

        进程组的ID就是组长的进程ID

3.会话

创建一个会话注意事项:

        不能是进程组长

        创建会话的进程成为新进程组的组长

        有些linux版本需要root权限执行此操作

        创建出的新会话会丢弃原有的控制终端

        一般步骤:fork ,父进程死掉,子进程执行创建会话操作(setsid

获取进程所属的会话ID:

        pid_t getsid(pid_t pid);

创建一个会话:

        pid_t setsid(void);

4.创建守护进程模型

fork子进程,父进程退出

子进程创建新会话

改变当前工作目录chdir(不必须)

重设文件掩码(不必须)

关闭文件描述符

执行核心工作

2.线程的概念

主线程和子线程

        共享:.text   .bss   .data   堆   动态加载区   环境变量   命令行参数

        通信:全局变量,堆

        不共享:栈——若共五个线程,栈区会被平均分成五块

在Linux下,线程就是进程——轻量级进程

对于内核来说,线程就是进程

多进程和多线程的区别:

        多进程:始终共享的资源:代码、文件描述符、内存映射区---mmap

        多线程:始终共享的资源:堆、全局变量——节省资源

安卓线程man page ,命令:

sudo apt-get install manpages-posix-dev

查看指定线程的LWP号——线程ID:

        线程号和线程ID是有区别的

        线程号是给内核看的

        线程ID是我们程序员看的

查看方式(找到程序的进程ID):  ps -Lf pid

例如:打开火狐浏览器

 查看线程为3798的进程(ps -Lf 3798),发现所有的PID相同,LWP不相同

3.线程的创建

1.pthread_create创建线程

函数原型:

int pthread_create( pthread_t *thread,                 //线程ID = 无符号长整型

                               const pthread_attr_t *attr,      //线程属性,NULL

                               void *(*start_routine)(void *), //线程处理函数

                               void *arg);                              //线程处理函数的参数

参数:

        pthread:传出参数,线程创建成功之后,会被设置一个合适的值

        attr:默认传NULL

        start_routine:子线程的处理函数

        arg: 回调函数的参数

返回值:成功:0   错误:错误号 //perror不能使用该函数打印错误信息

主线程先退出,子线程会被强制结束

验证线程直接共享全局变量


在main函数中创建一个线程,为主线程

创建主线程时,调用的函数为子线程的处理函数

若没有睡眠2s,主线程先退出,子线程会被强制结束

线程打印错误号和错误信息:

strerror();//获取错误信息

2.pthread_exit单个线程退出

函数原型: void pthread_exit(void *retval)

        retval指针:必须指向全局变量,堆

在主线程创建之后,for循环执行之前,调用pthread_exit函数,会退出单个主线程

不会打印主线程的for函数,而子线程不会被影响


主线程在for函数之后调用pthread_exit函数

子线程在循环i=2时调用pthread_exit函数


主线程while循环,子线程在循环i = 2时,调用exit函数

主线程循环打印一会,就会退出进程


主线程while循环,子线程在循环i = 2时,调用pthread_exit函数,退出单个子线程

主线程一直循环打印

3.pthread_join阻塞等待线程退出,获取线程退出状态

函数原型:

int pthread_join(pthread_t pthread, void **retval)

参数:

        pthread:要回收的子线程的ID

        retval:读取线程退出的携带信息

        传出参数

                void* ptr;

                pthread_join(pthid,&ptr);

指向的内存和pthread_exit参数指向地址一致

 在主线程调用pthread_join函数

阻塞主线程并等待子线程退出后,执行剩余代码

4.pthread_detach线程分离

函数原型:int pthread_datach(pthread_t thread);

调用该函数之后不需要 pthread_join

子线程会自动回收自己的PCB

5.pthread_cancel杀死(取消)线程

函数原型: int pthread_cancel(pthread_t pthread);

使用注意事项:

在要杀死的子线程对应的处理的函数的内部,必须做过一次系统调用

write read printf

int a = 2; int b = a+3;

pthread_testcancel();设置取消点

6.pthread_equal比较两个线程ID是否相等(预留函数)

函数原型:

int pthread_equal(pthread_t t1,pthread_t t2);

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

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

相关文章

多模态数字人AI产品正在革新金融业,解密头部银行、证券公司都在用的AI工具

在人工智能迅猛发展的时代背景下,金融业正迎来一场深刻的变革。 多模态的人工智能,以其独特的魅力,正在重塑金融行业的格局,为金融服务带来前所未有的新想象。从今年以来行业对AI技术的探索与实践中,AIGC 3D数字人多模…

多态性核SSR的鉴定

多态性核SSR的鉴定 文章目录 多态性核SSR的鉴定前言一、使用bwa对测序数据进行mapping二、使用SOAPdenovo2对核序列进行从头组装成scaffolds三、使用CandiSSR寻找多态性核SSR3.1. 安装CandiSSR软件的准备3.2. 运行CandiSSR时的准备3.3. 整理得到的结果文件 四、统计Contig的数量…

【AIGC探索】AI实现PPT生产全流程

AI实现PPT生产流程 简单概括流程就是: 选择用百度文库AI生成PPT,使用WPS和islide辅助美化,使用文字大模型生成大纲,使用宏指令快速规范细节。 理由如下: 大多数PPT工具生成大纲会有文字篇幅限制,通过大模型…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中,都有网络组件用于加载网页,鸿蒙ArkTS中也有类似的组件。   web组件,用于加载指定的网页,里面有很多的方法可以调用,虽然现在用得比较少,了解还是必须的。   演…

数学建模(基于Python实现)--灰色关联分析法讲解,含案例

前言 这是去年底学数学建模老哥的建模课程笔记; 未来本人将陆陆续续的更新数学建模相关的一些基础算法,大家可以持续关注一下,主要在于运用; 提示:数学建模只有实战才能提升🔥​🔥​&#x1f…

【go从零单排】error错误处理及封装

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,error 是一个内置的接口类型,用于表示错误情…

论文阅读笔记:Depth Pro: Sharp Monocular Metric Depth in Less Than a Second

论文阅读笔记:Depth Pro: Sharp Monocular Metric Depth in Less Than a Second 1 背景1.1 动机1.2 提出的方法 2 创新点3 方法4 模块4.1 训练目标4.2 课程训练 4.3 边缘评价指标4.4 焦距估计 5 效果5.1 和SOTA方法的对比 论文:https://arxiv.org/abs/24…

flutter 项目初建碰到的控制台报错无法启动问题

在第一次运行flutter时,会碰见一直卡在Runing Gradle task assembleDebug的问题。其实出现这个问题的原因有两个。 一:如果你flutter -doctor 检测都很ok,而且环境配置都很正确,那么大概率就是需要多等一会,少则几十分…

跨子网的WinCC客户机/服务器如何实现通讯?

为了更有效地利用有限的IP地址,为了减少广播对网络带宽的占用从而提高带宽,为了实现在不同子网中应用不同的安全策略从而提高网络安全性,现场通常要求划分子网,将安全等级要求不同的计算机安置在不同的子网中,分开管理…

SpringClud一站式学习之Eureka服务治理(二)

SpringClud一站式学习之Eureka服务治理 引言1. 搭建Eureka Server1.1. 添加Eureka Server依赖1.2. 添加 Eureka Server注解1.3. 配置Eureka Server1.4. 运行Eureka Server 2. 搭建Eureka Client 服务提供者2.1. 添加依赖2.2. 添加注解2.3. 配置Eureka Client2.4. 启动服务 3. 搭…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者:擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时,通常会有一些去重的需求,这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据,但是在merge的时候会根据order …

加入GitHub Spark需要申请

目录 加入GitHub Spark需要申请 GitHub Spark 一、产品定位与特点 二、核心组件与功能 三、支持的AI模型 四、应用场景与示例 五、未来展望 六、申请体验 加入GitHub Spark需要申请 GitHub Spark 是微软旗下GitHub在2024年10月30日的GitHub Universe大会上推出的一款革…

鸿蒙与团结引擎c#与ts简单交互

目录 团结中调用ts代码 鸿蒙中调用团结代码 首先在团结创建代码,需要将代码添加到场景物体中 devecoStudio端编写ts代码 在index页面添加一个测试按钮 团结中调用ts代码 团结引擎 - 手册: Call TypeScript plug-in code from C# scripts 注册函数要跟文件名一致 在u…

Qt QCustomplot 在采集信号领域的应用

文章目录 一、常用的几种开源库:1、QCustomPlot:2、QChart:3、Qwt:QCustomplot 在采集信号领域的应用1、应用实例时域分析频谱分析2.数据筛选和处理其他参考自然界中的物理过程、传感器和传感器网络、电路和电子设备、通信系统等都是模拟信号的来源。通过可视化模拟信号,可以…

世优科技携手人民中科打造AI数字人智能体助力智慧校园

近日,世优科技与人民中科携手,为中国劳动关系学院开发了一款AI数字人助手,不仅在校园内部承担日常问询、交互工作,还在学校的展厅中担任讲解员的角色,为师生们提供生动详尽的导览服务。 中国劳动关系学院作为中华全国总…

7.2、实验二:被动接口和单播更新

源文件链接: 7.2、实验二:被动接口和单播更新: https://url02.ctfile.com/d/61945102-63671890-6af6ec?p2707 (访问密码: 2707) 一、被动接口 1.介绍 定义: 在路由协议的配置中,一个被动接口指的是一个接口不发送路由更新包的配置方式&a…

达梦8-达梦数据实时同步软件(DMHS)配置-Oracle-DM8

1、安装环境 源端目的端IP地址192.168.6.111192.168.6.110系统版本Red Hat 6.4Kylin v10数据库版本Oracle11g达梦 v8系统用户Oracledmdba字符集MERICAN_AMERICA.AL32UTF8UTF-8端口15215236实例名PRODDMSERVER数据库软件目录/u01/app/oracle/opt/dmdbmsDMHS安装目录/u01/dmhs/o…

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备:IP常见问题解决方案

随着视频监控技术的不断发展,NVR(网络视频录像机)已经成为现代安防系统的重要组成部分。而为了更高效地管理多个品牌的NVR设备,EasyNVR这一多品牌NVR管理工具应运而生。然而,在实际使用过程中,尤其是在多个…

新160个crackme - 094-TheBigMan-crackme6

运行分析 需破解Name和Serial PE分析 LCC win32程序,32位,无壳 静态分析&动态调试 ida搜索字符串,进入关键函数 ida动调,发现关键判断函数func_1 进入后,发现Name长度需满足一定要求,且func_2返回值不能…

软考系统分析师知识点三七:今日考试

前言 今年报考了11月份的软考高级:系统分析师。 考试时间:11月9日。 今日考试。 今日考试 上午:选择题、案例题,注意记一下选择题和案例题中出现的知识点。 中午:再次整理强记一下论文框架、论文知识点 下午&…