inux kernel里是不区分进程/线程的,都用的是struct task_struct结构。如果一个进程启动,然后创建n个线程,那么对内核来说,就是多了n+1个struct task_struct结构而已,且这后n+1个task_struct里的成员指针group_leader指向那个创建它们的进程。这个创建其它人的进程当然就是这个thread group的leader。
在2.6.9版的kernel里,每个task_struct有自己的rlim结构(就是用来限制进程访问资源的,可man setrlimit之),也就是说,你在其中一个线程setrlimit,只是影响自己,其它线程没变化。
但是在2.6.18版kernel里,一个thread group里的task_struct共享统一各rlim实例,也就是说,你在任意一个线程里setrlimit,所有该thread group里的线程,包括那个创建者进程,都会改变资源限制状态。
我是在redhat 4u和5u机器上分别跑同一套代码,发现这一不同的。
留言: