psコマンドのSTATの値からIOによって待たされてるプロセスを探す

man psすると下記のように定義されてpsコマンドでプロセスの状態を知る事が出来ます。

プロセスの状態コード
s, stat, state 出力指定子 (ヘッダ "STAT" または "S") がプロセス状態の説明のために表示する値を以下に示す。
D    割り込み不可能なスリープ状態 (通常 IO 中)
R    実行中または実行可能状態 (実行キューにある)
S    割り込み可能なスリープ状態 (イベントの完了を待っている)
T    ジョブ制御シグナルまたはトレースされているために停止中の状態
W    ページング状態 (2.6.xx カーネルからは無効)
X    死んだ状態 (見えるべきではない)
Z    終了したが、親プロセスによって回収されなかった、消滅した (ゾンビ) プロセス
BSD 形式で stat キーワードが用いられたときは、以下の添付文字が表示されることがある。
<    優先度の高いプロセス (他のユーザーに対して良くない)
N    優先度の低いプロセス (他のユーザーに対して良い)
L    実メモリのページをロックして利用している (リアルタイム処理やカスタム IO 向け)
s    セッションリーダ
l    マルチスレッド化されている (NPTL pthreads が行うように、CLONE_THREAD が使われている)
+    フォアグラウンドのプロセスグループに含まれている


そして、例えば下記のようにIO原因で処理が進んでないプロセスを
STATがDであるものとして探す事が出来ます。

# ps auxw | grep " D" | grep -v grep
oracle    9042 43.7 31.1 6303720 5033112 ?     Ds   12:05  22:27 oraclexxxx (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))