- 论坛徽章:
- 1
|
最新进展,请结合14的信息
下面是14楼的部分信息:
10个用户态线程(pthread_create创建的)都运行完后(线程都是正确的退出),主线程sleep()一段时间,在ps -emo THREAD | grep test3,如下,下面的线程都是内核线程:
bssdev 934214 926102 - A 99 60 11 * 200001 pts/3 - test3
- - - 1089551 S 0 60 1 f100070f10010a40 8c10400 - - -
- - - 1183781 S 0 60 1 f100070f10012140 8c10400 - - -
- - - 1188093 S 0 60 1 f100070f10012240 8c10400 - - -
- - - 1216909 S 0 60 1 f100070f10812940 8c10400 - - -
- - - 1229139 R 99 109 0 - 400010 - - -
- - - 1290729 S 0 60 1 f100070f10813b40 8c10400 - - -
- - - 1139453 S 0 60 1 f100070f11011640 8c10400 - - -
- - - 1159737 S 0 60 1 f100070f11011b40 8c10400 - - -
- - - 1249867 S 0 60 1 - 2400400 - - -
- - - 1127371 S 0 60 1 f100070f11811340 8c10400 - - -
- - - 1344427 S 0 60 1 f100070f11814840 8c10400 - - -
- - - 1352545 S 0 60 1 f100070f11814a40 8c10400 - - -
接着,监视了一下线程的状态(对应上面的信息),监视信息如下:
1089551 flags = PR_ASLEEP | PR_NOREGS
1183781 flags = PR_ASLEEP | PR_NOREGS
1188093 flags = PR_ASLEEP | PR_NOREGS
1216909 flags = PR_ASLEEP | PR_NOREGS
1229139 flags = PR_NOREGS
1290729 flags = PR_ASLEEP | PR_NOREGS
1139453 flags = PR_ASLEEP | PR_NOREGS
1159737 flags = PR_ASLEEP | PR_NOREGS
1249867 flags = PR_ASLEEP | PR_NOREGS
1127371 flags = PR_ASLEEP | PR_NOREGS
1344427 flags = PR_ASLEEP | PR_NOREGS
1352545 flags = PR_ASLEEP | PR_NOREGS
这里flags指的是内核线程的状态, 结合 man proc,可以看到
PR_ASLEEP 的意思是:Thread is in an interruptible sleep within a system call
中文的翻译:PR_ASLEEP 该线程是系统调用的可中断休眠中的LWP。
所以可以看出,内核线程确实是sleep了,而不是退出了,但这是怎样造成的呢? 不理解上面的PR_ASLEEP 的意思 |
|