Nan*_*iao 11 linux multithreading pthreads linux-kernel
根据proc手册:
/ proc/[pid]/stack(自Linux 2.6.29起)
此文件提供此进程内核堆栈中函数调用的符号跟踪.仅当内核使用CONFIG_STACKTRACE配置选项构建时,才会提供此文件.
所以我写了一个测试程序:
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <pthread.h>
void *thread_func(void *p_arg)
{
pid_t pid = fork();
if (pid > 0) {
wait(NULL);
return 0;
} else if (pid == 0) {
sleep(1000);
return 0;
}
return NULL;
}
int main(void)
{
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func, "Thread 1");
pthread_create(&t2, NULL, thread_func, "Thread 2");
sleep(1000);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行后,用于pstack检查进度的线程:
linux-uibj:~ # pstack 24976
Thread 3 (Thread 0x7fd6e4ed5700 (LWP 24977)):
#0 0x00007fd6e528d3f4 in wait () from /lib64/libpthread.so.0
#1 0x0000000000400744 in thread_func ()
#2 0x00007fd6e52860a4 in start_thread () from /lib64/libpthread.so.0
#3 0x00007fd6e4fbb7fd in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7fd6e46d4700 (LWP 24978)):
#0 0x00007fd6e528d3f4 in wait () from /lib64/libpthread.so.0
#1 0x0000000000400744 in thread_func ()
#2 0x00007fd6e52860a4 in start_thread () from /lib64/libpthread.so.0
#3 0x00007fd6e4fbb7fd in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7fd6e569f700 (LWP 24976)):
#0 0x00007fd6e4f8d6cd in nanosleep () from /lib64/libc.so.6
#1 0x00007fd6e4f8d564 in sleep () from /lib64/libc.so.6
#2 0x00000000004007b1 in main ()
Run Code Online (Sandbox Code Playgroud)
同时,检查/proc/24976/stack:
linux-uibj:~ # cat /proc/24976/stack
[<ffffffff804ba1a7>] system_call_fastpath+0x16/0x1b
[<00007fd6e4f8d6cd>] 0x7fd6e4f8d6cd
[<ffffffffffffffff>] 0xffffffffffffffff
Run Code Online (Sandbox Code Playgroud)
该24976工艺具有3螺纹,它们在系统调用(所有的块nanosleep和wait),因此所有的3线程现在的工作kernel空间,并变成内核线程现在,对不对?如果这是真的,那么文件中应该有3堆栈/proc/[pid]/stack.但似乎文件中只有1堆栈/proc/[pid]/stack.
我该怎么理解/proc/[pid]/stack?
我该怎么理解
/proc/[pid]/stack?
摘自手册页proc:
还有其他有用的伪路径:
[stack]初始进程(也称为主线程)堆栈.
在这之下,您可以找到:
[stack:[tid]](自Linux 3.4起)
线程的堆栈(其中[tid]是线程ID).它对应于/ proc/[pid]/task/[tid]/path.
这似乎是你在寻找什么.
| 归档时间: |
|
| 查看次数: |
6704 次 |
| 最近记录: |