对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程。

主线程退出后子线程的状态依赖于它所在的进程,如果进程没有退出的话子线程依然正常运转。如果进程退出了,那么它所有的线程都会退出,所以子线程也就退出了。
主线程退出,进程等待所有子线程执行完毕后才结束

进程启动后会默认产生一个主线程,默认情况下主线程创建的子线程都不是守护线程(setDaemon(False))。因此主线程结束后,子线程会继续执行,进程会等待所有子线程执行完毕后才结束

所有线程共享一个终端输出(线程所属进程的终端)

输出为:

可见父线程结束后,子线程仍在运行,此时结束进程,子线程才会被终止
主线程结束后进程不等待守护线程完成,立即结束

当设置一个线程为守护线程时,此线程所属进程不会等待此线程运行结束,进程将立即结束

输出:

thread1是守护线程,thread2非守护线程,因此,进程会等待thread2完成后结束,而不会等待thread1完成

注意:子线程会继承父线程中daemon的值,即守护线程开启的子线程仍是守护线程
主线程等待子线程完成后结束

在线程A中使用B.join()表示线程A在调用join()处被阻塞,且要等待线程B的完成才能继续执行

输出:

主线程在执行到thread2.join()时被阻塞,等待thread2结束后才会执行下一句

1/0 会使主线程报错退出,且thread1设置了daemon=True,因此主线程意外退出时thread1也会立即结束。thread1.join()没有被主线程执行

转自:python主线程与子线程的结束顺序_侵删

c++ 等待子线程结束_python主线程与子线程的结束顺序相关推荐

  1. python捕捉线程错误_python 主线程捕获子线程异常

    最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''' Created on Oct 27, 2015 @author: wujz ''' import ...

  2. python主线程_Python主线程和子线程

    Python主线程和子线程 一.setDaemon(False) 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行的最小单位,当设置多线程时,主线程会创建多个子线程,在Python中,默认 ...

  3. python主辅线程_python主线程捕获子线程的方法

    最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''''' Created on Oct 27, 2015 @author: wujz ''' impo ...

  4. java主线程控制子线程_CountDownLatch控制主线程等子线程执行完--Java多线程

    1.[代码]CountDownLatch控制主线程等子线程执行完--Java多线程 package com.sihuatech.common; import java.util.concurrent. ...

  5. android广播怎样运行在子线程,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    抛开你这段代码不看,单根据你的标题来回答: android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢? 需要在子线程执行完成的地方,通过主线程的Handler发送一条消 ...

  6. android线程通信方式,Android 主线程和子线程通信问题

    Android 如今不支持View在子线程中创建及调用其方法.假设要实现子线程内容更新之后.将结果及时反馈到主线程中,该怎样出来呢? 能够在主线程中创建Handler来实现. 这样子线程的结果.能够通 ...

  7. c++主线程和子线程

    c++主线程和子线程 最近在学习c++多线程,写一篇博客记录下自己的收获. 一.main()函数是主线程函数,在main()函数中创建的线程属于子线程,那主线程和子线程的优先级谁更高呢? 可以看下另外 ...

  8. android判断主线程_Android主线程和子线程区别详解

    主线程和子线程的区别 每个线程都有一个唯一标示符,来区分线程中的主次关系的说法. 线程唯一标示符:Thread.CurrentThread.ManagedThreadID; UI界面和Main函数均为 ...

  9. python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))

    1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...

最新文章

  1. MySql清空表的方法介绍 : truncate table 表名
  2. 以云原生的名义,举办一次技术聚会
  3. 利用cmake查看OpenCV的源码的方法
  4. 词频统计 求最大k个数
  5. 用IIS建立的.net网站通过IP地址不能访问解决方法
  6. Python中threading的join和setDaemon的区别及用法
  7. 使用Hibernate和Spring构建Java Web应用程序
  8. ORACLE EBS 多账套总结
  9. 第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B lca水 D 思维,找规律...
  10. 在fritzing中怎么导入_电路图制作软件(Fritzing)
  11. 缓存设计方案 你了解吗 SpringBoot 快速集成实现一级缓存Redis和二级缓存Caffeine 可自定义扩展
  12. 仿新浪新闻中异步替换关键字
  13. 利用DirectoryEntry获取域内计算机以及共享资源
  14. JTAG各类接口针脚定义及含义
  15. Pillow的下载与安装
  16. [转贴]风险管理之巴塞尔协议
  17. 有关“重要极限”的经典例题
  18. 《X战警:逆转未来》热映 破福斯海外开画纪录
  19. css源码笔记(四)【爱创课堂专业前端培训】
  20. java生成矢量条形码二维码

热门文章

  1. 250个jquery 插件
  2. 线程 pthread_create Linux函数 线程创建
  3. jetty java 禁用目录列表_Apache httpd 目录列表禁用配置(options indexes)
  4. easyexcel多个sheet导入_Easypoi实现excel多sheet表导入导出功能
  5. pycharm如何修改文件名
  6. shell之提取头文件
  7. 传统蓝牙和Bluz低功耗蓝牙的区别
  8. Clojure 学习入门(14)- 循环控制
  9. 数据结构与算法总结(八股文)
  10. 工具之wireshark保存rtp数据