linux - 如果进程退出时 Linux 确实只是后台进程,那么它们如何清理线程?

标签 linux linux-kernel

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

最佳答案

读完Linux源码后,我想我已经有了答案。任务通过任务 ID 和线程组 ID 来区分。 getpid() 实际上返回任务的线程组 ID,该 ID 对于组中的所有任务都是相同的。这让内核拥有一个可用于实现线程的可调度任务的单一概念。

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

关于linux - 如果进程退出时 Linux 确实只是后台进程,那么它们如何清理线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041397/

相关文章:

linux - 能够使用非 sudo 用户覆盖只读文件的 root 权限

c - 在 kretprobe 的 entry_handler 中获取被探测函数的参数

linux - 从 sk_buff 的网络 header 确定数据包是 ipv4 还是 ipv6

linux - 我在 linux ubuntu 20.04 上安装 dotnet sdk 时遇到问题

android - 未应用 Udev 规则

c++ - SIGBUS 何时使用 Placement new?

linux - 检测 curses 中的自动按键重复

linux - 调用 fork() 时哪个进程先运行

linux - 配置 LVDS 显示时序的问题(rk3288 上的 linux)