/proc/{pid}下记录了每一个进程运行时的全部关键信息,那这些信息是谁来生成的呢,答案是Linux内核。ios
Linux内核在执行你写的程序时,将全部关键信息写到了/proc/{pid}下,所以你能够经过查看这个目录下的信息来或者进程的运行时行为,这对于那些好奇内核是如何运行程序的同窗是很是重要的。程序员
你能够把这个目录下的信息理解为Linux内核在执行你写的程序时所打印的Log。经过该Log你就能够知道进程开启了多少线程了。微信
Linux内核在执行程序时须要为每一个进程分配一个id,相似于身份证号的做用,用于识别进程,所以想获取某个进程开启了多少线程首先必需要知道是进程id。性能
咱们来看一下最简单的helloworld程序有多少线程:spa
#include <iostream> #include <unistd.h> int main() { std::cout<<"helloworld"; sleep(1000); //保持进程不退出 return 0; }
接下来编译运行:操作系统
$ g++ s.cpp -o helloworld $ ./helloworld & [1] 125626
咱们能够发现,该helloworld进程的进程号是125626,有了进程号咱们就能够查看该进程开启多少线程了。运行以下命令:线程
$ cat /proc/125626/status | grep Threads Threads: 1
能够看到,和咱们的预期是同样的,该helloworld进程仅有开启了一个线程。code
在这个实验中,咱们动态建立线程:进程
#include <pthread.h> #include <unistd.h> void* func(void* arg) { sleep(10000); } int main() { pthread_t id; for (int i=0;i<10;i++) { pthread_create(&id,NULL, func,NULL); sleep(10); } return 0; }
在这个程序当中,咱们动态建立了10个线程,每建立一个线程sleep10秒,每一个线程sleep10000秒。编译运行:ip
$ g++ s.cpp -o helloworld $ ./helloworld & [1] 125667 $ cat /proc/125667/status | grep Threads Threads: 2 $ cat /proc/125667/status | grep Threads Threads: 2 $ cat /proc/125667/status | grep Threads Threads: 3 $ cat /proc/125667/status | grep Threads Threads: 4 $ cat /proc/125667/status | grep Threads Threads: 5 $ cat /proc/125667/status | grep Threads Threads: 6 $ cat /proc/125667/status | grep Threads Threads: 10
能够看到,当用cat查看线程数的时候进程已经建立了两个线程,若是快速查看两次,发现线程数据都是2,可是隔一段时间后(超过10s)会发现线程数为3,到最后线程数为10,符合咱们的预期。
经过命令 "cat /proc/{pid}/status | grep Threads" 能够动态查看进行运行时的线程个数。
若是你喜欢该文章,欢迎关注个人微信公共帐号,码农的荒岛求生,获取更多计算机内功的知识。
计算机内功决定程序员职业生涯高度