我试图理解一段使用的代码__ctype_b_loc(),问题是我不知道这个函数的目的是什么.
到目前为止,我发现它的定义是在ctype.h.我还找到了它的原型和实现.我仍然不知道这个功能是什么.
有人能让我高兴吗?
为了验证我想要使用的第三方二进制分布式软件的行为,我正在实现一个内核模块,其目标是跟踪该软件生成和终止的每个子项。
目标二进制文件是 Golang 生成的二进制文件,并且它是多线程的。我编写的内核模块在内核函数_do_fork()和 do_exit()上安装了钩子,以跟踪该二进制文件生成和终止的每个进程/线程。
LKM 或多或少是有效的。
然而,在某些情况下,我会遇到无法解释的情况。看起来进程/线程可以在不通过do_exit()的情况下终止。
我通过printk()收集的证据显示了进程创建,但并不表明进程终止。
我知道printk()可能会很慢,而且我也知道在这种情况下消息可能会丢失。
为了防止由于控制台缓慢而导致消息丢失(对于这个特定的应用程序,使用了串行 tty 115200),我尝试实现一个更快的控制台,并使用netconsole收集消息。
所描述的设置似乎确认进程可以终止而无需通过do_exit()函数。
但因为我不确定我的消息不会在printk()基础设施上丢失,所以我决定重复相同的测试,但用ftrace_printk( ) 替换 printk( ) ,这应该是printk()的更精简的替代方案。
仍然是相同的结果,偶尔我看到进程没有通过do_exit(),并验证 PID 当前是否正在运行,我必须面对它没有运行的事实。
另请注意,我将挂钩放在do_exit()内核函数中作为第一条指令,以确保函数流不会在被调用函数内终止。
我的问题如下:
Linux 进程可以在其流程不经过do_exit()函数的情况下终止吗?
如果是这样,有人可以告诉我这种情况会是什么吗?