我正在玩Linux内核,有一件事我不明白是init_task任务的PID。
据我所知,有两个特殊的pid:idle / swapper任务的pid 0,init任务的pid 1。
每个在线资源(例如一个 , 两个 )我都可以find, init_task任务代表了交换任务,即它应该有pid 0。
但是当我使用从init_task开始的for_each_processmacros打印所有的pid时,我得到pid 1作为第一个进程。 我根本没有得到0。 这意味着init_task具有pid 1,并且它是init任务(?!)。
在C语言的variables名中,双下划线是什么意思?
在内核模块中创build一个以太网数据包并发送
当软重启Linux内核挂起在“解压Linux …完成,启动内核”
为什么我们可以从disPATCH LEVEL或以上的非分页池访问内存
请帮我解决这个困惑。
PS内核版本是2.4。
设备驱动程序充当虚拟networking摄像头
什么是沙盒
有没有一种方法来获取电池信息(状态,插入等),而无需读取Linux上的proc / sys文件?
如何在cpu处于保护模式时读取硬盘?
从Linux内核访问物理内存
我困惑的原因是for_each_task宏的一个棘手的定义:
#define for_each_task(p) for (p = &init_task ; (p = p->next_task) != &init_task ; )
即使看起来p从init_task开始,它实际上是从init_task.next_task开始的,因为条件中的赋值。
所以for_each_task(p) { /* ... */ }可以被重写为:
p = init_task.next_task; while(p != &init_task) { /* ... */ p = p->next_task; }
可以看出,交换器进程不是迭代的一部分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。