linux下查看线程状态
今年开始和两个朋友一起做点事,我负责所有的软件开发,包括web、嵌入式和后台服务器的开发,感觉自己都全能了(偷笑)。
前端软件,采用了linux的系统,在开发的过程中出现了一个非常奇怪的现象。按键线程,总是感觉被挂起了或者是卡到了某个点,按下按键时,软件无法检测到按键事件。但是,在按键线程的大循环里面,加一个printf函数输出,按键线程就又可以正常捕捉按键事件了。迫于无奈,我必须要查看线程的状态,到底这个线程是退出了还是被挂起了?于是,百度。在另外一个人的博客中发了,可以查看目录/proc/pid/task/tid/stat文件里面的信息。因此,先手动查看了这个文件,发现里面全是些数字,根本无从判断。发现同一个目录下有一个status的文件,使用cat进行查看,其中有一行State:r(running),这个不就是自己需要的信息吗。于是想通过popen在程序中将前面的功能实现,但是其中有需要获取按键线程的tid的功能。最开始使用了pthread_create时的第一个参数,做为tid,但是程序中发现,这个值根本就是一个负数。于是,又去百度,发现一个函数gettid。于是在linux下查看man文档,这个函数需要自己通过syscall来封装。(long)syscall(__NR_gettid)。然后继续使用上面的方法,看到了自己的线程确实是睡着了(sleeping)。这里把查看线程状态的方法记录下来,以备以后忘记了可以查看。