分离线程和守护程序线程之间有什么区别?

时间:2012-08-10 15:30:52

标签: multithreading pthreads daemon detach

我知道所有守护程序线程都是分离的线程,但为什么所有分离的线程都不是守护进程?

假设线程“main”创建线程“A”(非分离),线程“A”创建线程“B”(分离)。当“B”继续运行时,可以“A”退出吗?

PS:我问的是参考pthreads,但无论如何都请回答。

2 个答案:

答案 0 :(得分:2)

也许你应该先阅读What is the difference between fork and thread?

详细说明

守护程序线程

通常在C / C ++(Linux环境)中,可以使用 fork()创建一个守护进程。 fork()通过复制调用进程来创建新进程。这里父进程将退出,留下子进程。此子进程与控制终端分离,将所有{stdin,stdout,stderr}重新打开到/ dev / null,并将工作目录更改为根目录。 (当然,基于旗帜)。在Linux下,fork()是使用copy-on-write页面实现的,因此它所产生的唯一代价是复制父页面表所需的时间和内存,并为子项创建一个独特的任务结构。

分离主题

虽然Pthread分离行为不同(1)分离的线程一旦分离就无法连接回来(2)分离的属性仅在线程终止时确定系统的行为;如果进程使用exit终止(或等效,如果主线程返回),它不会阻止线程终止。 pthread_detach()函数将线程标识的线程标记为已分离。当分离的线程终止时,它的资源会自动释放回系统,而不需要另一个线程与终止的线程连接。

答案 1 :(得分:0)

我认为就内存模型而言,线程A可以在线程B继续运行时退出。此外,如果没有执行用户线程,程序将退出...或者您只能认为守护程序线程仍然存在,因此应用程序将以不同的方式结束