為了搞清楚程式、用到的函式庫等到底有沒有用到 multi-thread, 以及各 thread 的狀態如何變化等, 查了一下相關資訊。
在 man ps 裡沒看到適合的參數, ps -eLf 沒有列出 thread 的執行狀態。這頁 man page 太複雜, 看一看決定改看 man proc, 反正 ps 也是讀 /proc/PID 的資訊。
順著 "thread" 的關鍵字掃完 man proc, 看到 /proc/PID/task/ 有記錄擁有的 thread 資訊, 其中每一個目錄 /proc/PID/task/TID/有類似 /proc/PID/ 的資訊, 而 /proc/PID/task/TID/status 裡面有我要的東西。所以就寫了個小程式 thstate 來觀察行為, 試用後頗順利地達成階段性目標。/proc 真是好東西, 為啥以前都沒留意到呢 ...。
2012/01/05 更新
看到 wens 提到可混用 ps aux -L, 這樣就有 LWP (thread id) 了, 不過沒有 PPID。又查了一下 man page, 發現可用 -o 自訂格式, 這樣用
ps awxo pid,ppid,pgid,nlwp,lwp,stat,comm
就有符合我需求的材料了, 再配合 grep PID 即可。不過既然已寫好了客製化的 script, 還是用 script 比較順手一些。
2012/01/05 再更新
看到 Scott 提到可用 ps u -Lp PID, 終於湊出「終極」指令。上面的描述就當記錄吧, 也反映出軟體開發的常態, 工程師常常找不到想要的東西就開始自己重造輪子, 造好後才發現原來其實有更好的方案, 只是之前沒有看到 ...。
ps -Lo pid,ppid,pgid,nlwp,lwp,stat,command -p PID
沒有留言:
張貼留言