在 linux 世界中,主线程退出了,子线程是否退出是要看主线程的退出方式。

  1. 主线程以 return 的方式退出。

  2. 主线程以 pthread_exit() 函数的方式退出。

前者,main() 执行完 return 之后,实际上会调用 exit() 函数,该函数除了执行关闭IO等操作之外,还会执行关掉其他子线程的操作。

后者,在主线程中执行 pthread_exit() ,实际上是提前结束了 main 的主线程,也就无法执行后续的 exit() 函数了。所以,这种方法是可以达到主线程退出子线程继续运行的目的。

栗子:

#include <iostream>
#include <pthread.h>
#include <unistd.h>void *func(void *args)
{while (true){std::cout << "I am func." << std::endl;sleep(3);}
}int main()
{pthread_t pid = 0;pthread_create(&pid, nullptr, func, nullptr);pthread_detach(pid);pthread_exit(nullptr);return 0;
}

对于后来来说,由于子线程没有办法继续运行,所以子线程所在的进程也就变成了僵尸进程。验证方法:

ps -ef | grep test

结果:

xcl       1672  3102  0 17:40 pts/0    00:00:00 [test.o] <defunct>

“defunct”标识就是僵尸进程标识。

(SAW:Game Over!)

OS / Linux / 主线程退出了,子线程会退出吗?相关推荐

  1. [Java][Android] 多线程同步-主线程等待全部子线程完毕案例

    有时候我们会遇到这种问题:做一个大的事情能够被分解为做一系列相似的小的事情,而小的事情无非就是參数上有可能不同样而已! 此时,假设不使用线程,我们势必会浪费许多的时间来完毕整个大的事情.而使用线程的话 ...

  2. 主线程和子线程的关系(讨论主线程结束,子线程是否要回收)

    主线程和子线程,在操作系统里面其实是一样的,没有本质区别.至于主线程结束,子线程是否要回收,下面有两种比较特殊的情况. 第一种: 主线程退出了,子线程还可以执行. 主要是因为pthread_exit函 ...

  3. Java中主线程如何捕获子线程抛出的异常

    Java中主线程如何捕获子线程抛出的异常 参考文章: (1)Java中主线程如何捕获子线程抛出的异常 (2)https://www.cnblogs.com/jpfss/p/10272885.html ...

  4. 【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

    文章目录 一.判定当前线程是否是主线程 二.子线程中执行主线程方法 三.主线程中执行子线程方法 一.判定当前线程是否是主线程 在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如 ...

  5. DLL内线程同步主线程研究(子线程代码放到主线程执行)

    DLL内线程同步主线程研究(子线程代码放到主线程执行) 我们在实际项目中经常会用到多线程编程,比如Socket编程等,在创建的线程内同步主线程一般使用Synchronize方法实现子线程操作放到主线程 ...

  6. [转]Java中主线程如何捕获子线程抛出的异常

    这么来看待这个问题.首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下:     <<   ...

  7. 在主线程中为子线程解锁_在XP中为Google Chrome启用Vista黑色风格主题

    在主线程中为子线程解锁 If you've seen the screenshots of Google Chrome on XP vs Vista, you've probably noticed ...

  8. Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?

    首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行. talk is cheap,show me the code ...

  9. 主线程退出,子线程会退出吗?子线程崩溃,主线程会退出吗?

    记得以前刚接触多线程编程时,作为一个新手遇到的一个问题就是:我创建的子线程为什么没有跑起来?如以下最简单的一个程序: #include <stdio.h> #include <std ...

最新文章

  1. maven依赖decoder_引入依赖maven打包报错
  2. 嵌入式编程与c语言有何区别,有的嵌入式设备也提供C++编译器,那还有理由坚持使用C语言吗?...
  3. Ⅳ:zookeeper的acl权限控制
  4. html触发js参数怎么用,js 绑定带参数的事件以及手动触发事件
  5. nba2k19登陆显示你与服务器,NBA2K19无法登陆了?NBA2K19连不上服务器怎么办?[图]...
  6. flex弹性布局笔记
  7. 戴尔R410 centos6.3 x64 环境下 网卡驱动故障
  8. mset redis_redis mset string 命令简介
  9. CSDN 编辑器使用指南
  10. 使用reportlab生成条码
  11. 杜比服务器系统安装,小编教你给Win10系统安装杜比音效驱动的方法
  12. sqlplus基础命令
  13. 【CASS精品教程】CASS绘图软件入门初级教程超详细资料
  14. python处理点云数据_点云数据处理知识讲解
  15. 北京/西安内推 | 中国移动研究院NLP组招收自然语言处理算法实习生
  16. 基于STM32F103单片机的车牌识别图像处理识别系统 原理图PCB程序设计
  17. 环境经济:上市公司环保支出(2000-2020)104城-城投债数据(2000-2020)
  18. 专业CDR插件牛为设计大师
  19. 实验十二 HTTP 协议分析实验
  20. 全国计算机二级c语言怎么复习,全国计算机二级C语言知识点复习:基本知识

热门文章

  1. Unable to simultaneously satisfy constraints.
  2. MySQL Commons
  3. 【原创】自动更新程序2--更新程序的主窗体(技术:spring.net+三层架构+webservice+IrisSkin2换肤)...
  4. C#强化系列文章五:动态代码的使用(反射和动态生成类)
  5. linux usermod -aG命令:将用户添加到某个组group
  6. sonarqube中,分析maven聚合工程时,不必分析parent工程,只需分析下面的module子工程即可
  7. k8s查看节点CPU消耗情况
  8. k8s使用kubectl命令部署nginx并以nodeport方式暴露端口
  9. Java客户端操作zookeeper:删除节点代码示例
  10. Linux执行shell脚本的四种方式