今年開始和兩個朋友一起做點事,我負責所有的軟件開發,包括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)。這里把查看線程狀態的方法記錄下來,以備以后忘記了可以查看。