当进程退出时,linux如何清理线程,如果它们真的只是流程下的进程?

时间:2016-03-16 16:23:48

标签: linux linux-kernel

我的理解是线程和进程在Linux上实际上是相同的实体,区别在于它们之间共享的内存。我发现,如果父母和孩子之间没有明确的沟通,就很难确保正确清理子进程。我希望能够运行具有类似心理模型的子流程作为线程,因为它们在父进程退出时自动清理,但具有进程提供的内存安全性。 Linux如何自动清理线程,并且可以将相同的机制用于子进程吗?

1 个答案:

答案 0 :(得分:2)

阅读Linux源代码后,我想我有答案。任务由其任务ID和线程组ID区分。 getpid()实际上返回任务的线程组ID,这对于组中的所有任务都是相同的。这使内核具有可调度任务的概念,可用于实现线程。

由于glibc 2.3,exit()实际上调用了exit_group系统调用,而不仅仅是退出系统调用。此系统调用会终止线程组中的所有任务,而不仅仅是调用任务。它通过向具有相同线程ID的所有任务发送SIGKILL来实现此目的。