linux进程号、线程号、进程组号、父进程号

从内核的角度来看,Linux并没有线程这个概念,它把所有的线程都当作进程来实现,线程仅仅被视为一个与其它进程共享某些资源的进程,每个线程都拥有唯 一的一个task_struct结构体,所以在内核中,这个线程就是一个普通的进程.只是说由同一个进程所创建的进程共享了某些资源。

每个LinuxThreads线程都同时具有线程id和进程id,其中进程id就是内核所维护的进程号,而线程id则由LinuxThreads分配和维护。

__pthread_initial_thread 的线程id为PTHREAD_THREADS_MAX,__pthread_manager_thread的是 2*PTHREAD_THREADS_MAX+1,第一个用户线程的线程id为PTHREAD_THREADS_MAX+2,此后第n个用户线程的线程 id遵循以下公式:

tid=n*PTHREAD_THREADS_MAX+n+1

这种分配方式保证了进程中所有的线程(包括已经退出)都不会有相同的线程id,而线程id的类型pthread_t定义为无符号长整型(unsigned long int),也保证了有理由的运行时间内线程id不会重复。

从线程id查找线程数据结构是在pthread_handle()函数中完成的,实际上只是将线程号按PTHREAD_THREADS_MAX取模,得到的就是该线程在__pthread_handles中的索引。


LinuxThreads进程号没有特殊算法,一般是依次加1。

LinuxThreads有进程组号, 进程组是一个或多个进程的集合。进程组由进程组 ID 来惟一标识。除了进程号( PID )之外,进程组 ID 也是一个进程的必备属性。 每个进程组都有一个组长进程,其组长进程的进程号等于进程组 ID 。且该进程 ID 不会因组长进程   的退出而受到影响。

一般由一个父进程创建的所有
LinuxThreads属于同一个进程组。

linux获取LinuxThreads各种id的函数:Pthread_self(线程id)、getpid(进程id)、getppid(父进程id,一般pthread_create会启动一个管理进/线程,来创建和管理新LinuxThreads,为新LinuxThreads的父进程)、getpgid(0)/getpgrp(获取进程组id)。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16856446/viewspace-663820/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16856446/viewspace-663820/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值