我的理解是,线程和进程在Linux上实际上是同一个实体,区别在于它们之间共享的内存。我发现,如果没有父进程和子进程之间的明确通信,就很难确保正确地清理子进程。我希望能够以与线程类似的心智模型运行子进程,因为当父进程退出时,它们会自动清理,但具有进程提供的内存安全。Linux是如何自动清理线程的,同样的机制可以用于子进程吗?
发布于 2016-04-11 12:55:31
在阅读了Linux源代码之后,我想我有了答案。任务通过任务ID来区分,线程组ID.getpid()实际上返回任务的线程组ID,这对于组中的所有任务都是相同的。这使得内核只有一个可调度任务的概念,可以用来实现线程。
从glibc2.3开始,exit()实际上调用了exit_group syscall,而不仅仅是退出syscall。这个syscall杀死线程组中的所有任务,而不仅仅是调用任务。它通过向所有具有相同线程ID的任务发送SIGKILL来实现这一点。
https://stackoverflow.com/questions/36041397
复制相似问题