linux 线程与进程 pid,linux下线程所属进程号问题
這一段看《unix環(huán)境高級編程》,一個(gè)關(guān)于線程的小例子。
#include
#include
#include
pthread_t?ntid;
void?printids(const?char?*s){
pid_t?pid;
pthread_t?tid;
pid=getpid();
tid=pthread_self();
printf("%s?pid?%u?tid?%u?(0x%x)n",s,(unsigned?int)pid,
(unsigned?int)tid,(unsigned?int)tid);
}
void?*thr_fn(void?*arg){
printids("new?thread:");
return?((void?*)0);
}
int?main(){
int?err;
err=pthread_create(&ntid,NULL,thr_fn,NULL);
if(err!=0)
fprintf(stderr,"can't?create?threadn");
printids("main?thread");
sleep(1);
exit(0);
}
根據(jù)線程模型,在同一進(jìn)程環(huán)境下的線程有不同的線程ID,但所在進(jìn)程ID相同。書上說linux是使用clone系統(tǒng)調(diào)用來實(shí)現(xiàn)pthread_create的,執(zhí)行這段程序得到的主線程和新線程所在的進(jìn)程號并不是匹配的。可我在機(jī)器上試了一下,進(jìn)程號是相同的。這是其中一次運(yùn)行結(jié)果:
new?thread:?pid?2568?tid?3076471728?(0xb75f3bb0)
main?thread?pid?2568?tid?3076476448?(0xb75f4e20)
系統(tǒng)是用的是redhat?enterprise?AS?3?update?5,內(nèi)核V?2.4.21-32.ELsmp
莫非實(shí)現(xiàn)變了?。。。
|
getconf?GNU_LIBPTHREAD_VERSION
用上面的命令,看一下輸出,就知道你使用的線程庫是LinuxThread還是NPTL,后者同一進(jìn)程的不同線路程的進(jìn)程號一致。前者不一致
總結(jié)
以上是生活随笔為你收集整理的linux 线程与进程 pid,linux下线程所属进程号问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DB2下载官网
- 下一篇: linux 网络配置 阮一峰,Vim 配