当前位置: 首页 > news >正文

linux——退出单一线程

pthread_exit

exit(0)

函数原型: void pthread‐exit(void *retval); retval指针:必须指向全局,堆
#include<stdio.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<stdlib.h> void* myfunc(void *arg) { printf("child pthread id:%ld\n",pthread_self()); for(int i=0;i<5;i++) { printf("child pthread %d\n",i); } return 0; } int main() { pthread_t pthid; int ret; ret = pthread_create(&pthid,NULL,myfunc,NULL); if(ret != 0) { printf("error number is %d\n",ret); printf("%s\n",strerror(ret)); } printf("parent pthread id:%ld\n",pthread_self()); pthread_exit(NULL); for(int i=0;i<5;i++) { printf("parent pthread %d\n",i); } sleep(2); return 0; }

在主线程里调用pthread_exit(NULL)
  • 作用只退出当前主线程,进程不会结束
  • 结果:主线程挂了,但进程里还有子线程活着,所以子线程继续跑。
#include<stdio.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<stdlib.h> void* myfunc(void *arg) { printf("child pthread id:%ld\n",pthread_self()); for(int i=0;i<5;i++) { printf("child pthread %d\n",i); if(i==2) { exit(0); } } return 0; } int main() { pthread_t pthid; int ret; ret = pthread_create(&pthid,NULL,myfunc,NULL); if(ret != 0) { printf("error number is %d\n",ret); printf("%s\n",strerror(ret)); } printf("parent pthread id:%ld\n",pthread_self()); for(int i=0;i<5;i++) { printf("parent pthread %d\n",i); } pthread_exit(NULL); sleep(2); return 0; }

这里子线程循环到2是,exit退出了整个进程

#include<stdio.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<stdlib.h> void* myfunc(void *arg) { printf("child pthread id:%ld\n",pthread_self()); for(int i=0;i<5;i++) { printf("child pthread %d\n",i); if(i==2) { exit(0); } } return 0; } int main() { pthread_t pthid; int ret; ret = pthread_create(&pthid,NULL,myfunc,NULL); if(ret != 0) { printf("error number is %d\n",ret); printf("%s\n",strerror(ret)); } printf("parent pthread id:%ld\n",pthread_self()); int i=0 while(1) { i++; printf("parent pthread %d\n",i); } pthread_exit(NULL); sleep(2); return 0; }

这段代码就证明了,exit退出了整个进程

#include<stdio.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<stdlib.h> void* myfunc(void *arg) { printf("child pthread id:%ld\n",pthread_self()); for(int i=0;i<5;i++) { printf("child pthread %d\n",i); if(i==2) { pthread_exit(NULL); } } return 0; } int main() { pthread_t pthid; int ret; ret = pthread_create(&pthid,NULL,myfunc,NULL); if(ret != 0) { printf("error number is %d\n",ret); printf("%s\n",strerror(ret)); } printf("parent pthread id:%ld\n",pthread_self()); int i=0 while(1) { i++; printf("parent pthread %d\n",i); } pthread_exit(NULL); sleep(2); return 0; }

将exit换成pthread_exit就可以只退出子线程,不退出主线程了

也可以将pthread_exit(NULL)换为return NULL,效果也是一样的

还可以在子线程里调用个函数

#include<stdio.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<stdlib.h> void* myreturn() { return NULL; } void* myfunc(void *arg) { printf("child pthread id:%ld\n",pthread_self()); for(int i=0;i<5;i++) { printf("child pthread %d\n",i); if(i==2) { myreturn(); } } return 0; } int main() { pthread_t pthid; int ret; ret = pthread_create(&pthid,NULL,myfunc,NULL); if(ret != 0) { printf("error number is %d\n",ret); printf("%s\n",strerror(ret)); } printf("parent pthread id:%ld\n",pthread_self()); int i=0 while(1) { i++; printf("parent pthread %d\n",i); } pthread_exit(NULL); sleep(2); return 0; }

效果也是一样的

http://www.jsqmd.com/news/600163/

相关文章:

  • 网站 SEO 推广代运营需要多长时间才能见效_什么是网站 SEO 推广代运营
  • GLM-4.1V-9B-Base效果展示:中文表格图像结构识别与语义摘要生成
  • SEO网站推广平台可以为移动端网站提供哪些优化方案
  • STM32保姆级入门教程|第6章:定时器中断原理 + 精准LED闪烁(1s_2s_3s)实战(功能超详细+CubeIDE手把手)
  • 2026年4月大功率发电机及负载柜出租优选指南 - 优质品牌商家
  • OpenClaw低代码开发:千问3.5-35B-A3B-FP8将流程图截图转成可执行Python代码
  • OpenClaw邮件处理方案:Qwen2.5-VL-7B自动分类与回复
  • WindowsCleaner:让你的Windows系统重获新生的开源优化工具
  • OpenClaw跨平台协作:Qwen3.5-9B同步处理Mac与Windows截图
  • Windows系统安装OpenClaw详解:对接千问3.5-9B模型接口
  • 2026年4月食品行业花纹皮带厂家精选推荐 - 优质品牌商家
  • 高性能低噪声锁相环频率源lmx2592原理图和程序源码介绍:20MHz至9.8GHz宽频范围...
  • 基于SpringBootWeb的相关问题解答
  • 【Coze-AI智能体平台】Coze智能体实操:翻译助手从工作流搭建到应用发布全流程详解
  • 个人游戏笔记本免费“养龙虾”(Win10+WSL2+OpenClaw 部署与配置指南)
  • PyCharm 性能调优避坑录③:缓存与索引进阶优化|彻底告别重复索引、大型项目秒开
  • 双边滤波在图像去噪中的应用及MATLAB实现详解
  • OpenClaw定时任务管理:Phi-3-vision-128k-instruct每日早报自动生成系统
  • 2026/4/5 学习日志
  • 泰凌微TLSR8208蓝牙芯片透传数据‘吞字节’?一个SDK版本差异引发的血泪排查史
  • 冷却水小流量大温差对冷水机的影响
  • 综合修理厂适用汽车维修管理系统推荐指南 - 优质品牌商家
  • 【MySQL知识点问答题】组复制、管理工具与高可用恢复实践
  • 如何高效提取Android OTA包:payload-dumper-go完整使用指南
  • 收藏!Java后端转AI大模型开发:8年经验踩坑总结,2026最实用转型指南
  • OpenClaw智能旅行规划:Qwen3.5-9B整合航班酒店生成最优行程
  • Windows文件管理器终极美化指南:5分钟实现专业级透明效果
  • mysql数据库连接超时如何排查_检查网络延迟与连接池配置
  • LoRA与QLoRA显存优化指南:如何在小显存设备上高效训练大模型
  • 量子蒙特卡罗在材料科学中的7个神奇应用:从超导体设计到电池优化