未连接且主进程被杀死时的线程行为

时间:2015-10-28 12:19:36

标签: c++ c linux unix pthreads

我有一个进程,它创建了一个pthread,但是这个线程没有加入主线程。这个线程有一个无限循环。当进程启动时,这个线程也会启动,但如果使用SIGKILL杀死进程,这个线程会被自动杀死还是会变成僵尸线程?

谢谢,

罗希特夏尔

2 个答案:

答案 0 :(得分:1)

SIGKILL信号强制终止整个进程,无论它有多少线程以及这些线程正在做什么。此信号无法捕获或忽略。

如果进程的父进程仍然存在,则进程将处于僵尸状态,直到父进程调用wait或其变体。

答案 1 :(得分:0)

任何进程都不能忽略/处理SIGKILL。 当主线程返回时,它终止整个进程。这包括流程中的所有其他线程。当您从任何线程调用exit时,会发生同样的事情。

对于Linux,没有这样的"显式"进程和线程之间的区别。 它们中的每一个都由内核中的task_struct表示,它们被链接在一起。

每个进程主线程都有一个pid和任务组id(tgid)。因此,所有线程也有相同的pid或tgid。

清理流程后,只需清除child processes,not threads are reparented

更多关于语义:

一个线程与它的父级共享它的资源,这基本上意味着内存映射,文件描述符等。

当进程本身不存在时,谁将与?

共享资源的线程

你不能将它们重新表达到其他过程,因为它们需要获取它的资源。

  

因此,简而言之,子进程可以被重新分配,因为它没有   共享任何资源,因为子线程不能被重新分配

如果你想深入挖掘,你可以从这里开始: makelinux