我的理解是线程和进程在Linux上实际上是相同的实体,区别在于它们之间共享的内存。我发现,如果父母和孩子之间没有明确的沟通,就很难确保正确清理子进程。我希望能够运行具有类似心理模型的子流程作为线程,因为它们在父进程退出时自动清理,但具有进程提供的内存安全性。 Linux如何自动清理线程,并且可以将相同的机制用于子进程吗?
答案 0 :(得分:2)
阅读Linux源代码后,我想我有答案。任务由其任务ID和线程组ID区分。 getpid()实际上返回任务的线程组ID,这对于组中的所有任务都是相同的。这使内核具有可调度任务的单概念,可用于实现线程。
由于glibc 2.3,exit()实际上调用了exit_group系统调用,而不仅仅是退出系统调用。此系统调用会终止线程组中的所有任务,而不仅仅是调用任务。它通过向具有相同线程ID的所有任务发送SIGKILL来实现此目的。