![为什么内核线程被视为进程](https://linux22.com/image/34526/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%86%85%E6%A0%B8%E7%BA%BF%E7%A8%8B%E8%A2%AB%E8%A7%86%E4%B8%BA%E8%BF%9B%E7%A8%8B.png)
在 ps 命令的输出中,如下所示(kthreadd、ksoftirqd、kworker),我可以看到有些进程没有可执行文件,我发现这是因为它们是内核线程,所以为什么我们要处理某些内核将线程视为进程或使它们看起来像进程?线程名称后面的这个数字是什么意思?例如,我们可以通过发送信号来从用户空间杀死这些线程吗?
root 2 0 0 Nov30 ? 00:00:00 [kthreadd]
root 3 2 0 Nov30 ? 00:00:03 [ksoftirqd/0]
root 5 2 0 Nov30 ? 00:00:00 [kworker/0:0H]
root 7 2 0 Nov30 ? 00:00:41 [rcu_sched]
答案1
引用Linux 设备驱动程序,第三版。我没有使用“引用”按钮,因为我想将选项加粗
除非另有说明,所有这些选项都可以在您喜欢的任何内核配置工具的“内核黑客”菜单下找到。请注意,并非所有体系结构都支持其中一些选项。
配置_调试_内核
该选项只是使其他调试选项可用;它应该被打开,但本身并不启用任何功能。
配置_调试_SLAB
这个关键选项会在内核内存分配函数中开启多种类型的检查;启用这些检查后,可以检测到许多内存溢出和丢失初始化错误。分配的内存的每个字节在传递给调用者之前都设置为 0xa5,然后在释放时设置为 0x6b。如果您在驱动程序的输出中(或者经常在 oops 列表中)看到这些“有毒”模式中的任何一个重复出现,您就会确切地知道要查找哪种错误。当启用调试时,内核还会在每个分配的内存对象之前和之后放置特殊的保护值;如果这些值发生变化,内核就会知道有人超出了内存分配,并且会大声抱怨。还启用了针对更模糊错误的各种检查。
CONFIG_DEBUG_PAGEALLOC
释放时,整页将从内核地址空间中删除。此选项可以显着减慢速度,但它也可以快速指出某些类型的内存损坏错误。
CONFIG_DEBUG_SPINLOCK
启用此选项后,内核会捕获对未初始化的自旋锁的操作以及各种其他错误(例如两次解锁锁)。
CONFIG_DEBUG_SPINLOCK_SLEEP
此选项允许检查在持有自旋锁时尝试休眠的情况。事实上,如果您调用一个可能会休眠的函数,即使相关调用不会休眠,它也会抱怨。
配置_初始化_调试
标有 __init(或 __initdata)的项目将在系统初始化或模块加载时间后被丢弃。此选项启用在初始化完成后检查尝试访问初始化时内存的代码。
配置调试信息
此选项会导致构建内核时包含完整的调试信息。如果您想使用 gdb 调试内核,您将需要该信息。如果您计划使用 gdb,您可能还需要启用 CONFIG_FRAME_POINTER。
CONFIG_MAGIC_SYSRQ
启用“神奇 SysRq”键。我们将在本章后面的 4.5.2 节中查看这个键。
CONFIG_DEBUG_STACKOVERFLOW CONFIG_DEBUG_STACK_USAGE
这些选项可以帮助跟踪内核堆栈溢出。堆栈溢出的一个明确标志是没有任何合理回溯的 oops 列表。第一个选项向内核添加显式溢出检查;第二个使内核监视堆栈使用情况并通过神奇的 SysRq 键提供一些统计信息。
CONFIG_KALLSYMS
此选项(在“常规设置/标准功能”下)会导致内核符号信息内置到内核中;默认情况下它是启用的。符号信息用于调试上下文;如果没有它,oops 列表只能为您提供十六进制的内核回溯,这不是很有用。
CONFIG_IKCONFIG CONFIG_IKCONFIG_PROC
这些选项(位于“常规设置”菜单中)会导致将完整的内核配置状态内置到内核中并通过 /proc 提供。大多数内核开发人员都知道他们使用了哪种配置,并且不需要这些选项(这会使内核变大)。但是,如果您尝试调试其他人构建的内核中的问题,它们可能会很有用。
配置_ACPI_调试
在“电源管理/ACPI”下。此选项打开详细的 ACPI(高级配置和电源接口)调试信息,如果您怀疑与 ACPI 相关的问题,这会很有用。
配置_调试_驱动程序
在“设备驱动程序”下。打开驱动程序核心中的调试信息,这对于跟踪低级支持代码中的问题非常有用。我们将在第 14 章中讨论驱动程序核心。
CONFIG_SCSI_CONSTANTS
该选项位于“设备驱动程序/SCSI 设备支持”下,内置了详细 SCSI 错误消息的信息。如果您正在使用 SCSI 驱动程序,您可能需要此选项。
配置输入EVBUG
此选项(在“设备驱动程序/输入设备支持”下)打开输入事件的详细日志记录。如果您正在开发输入设备的驱动程序,此选项可能会有所帮助。但是,请注意此选项的安全隐患:它会记录您键入的所有内容,包括您的密码。
配置_分析
该选项位于“分析支持”下。分析通常用于系统性能调整,但它也可用于跟踪某些内核挂起和相关问题。
解释
启用这些选项使您能够接收输出线程守护进程碰撞。在某些情况下,这些将为您提供有关运行项目/线程的更多信息。的解释工作线程可以在这里找到。 RCU_Scheduler是tick机制读取复制更新。什么是Linux 内核中的 ReadCopyUpdate?
内核线程处理内核工作时使用的项目。不应被用户空间工具杀死。