psを使ってSTATでフィルタリングするには?

psを使ってSTATでフィルタリングするには?

STAT列が値Xに対応するすべてのプロセスを取得しようとしています。

私はawkを使ってこれをしました。 ps -aux | awk {'if ($8 == "S") print $8" "$11'}

ところで、ps以外のプログラムを使わずにこれをしたいと思います。どのような方法がありますか?

答え1

psフィルタリング機能は制限されていますが、ps多数のオプションがあるLinuxでもステータスごとにフィルタリングすることはできません。したがって、外部フィルタリングツールが必要です。

オプションセットを簡素化できます。すべてのプロセスの-axポータブルディスプレイと同じです。代わりに、awkを使用して列数を計算して選択-eできます。-o

ps -e -o stat,command | grep '^S '

答え2

いいえ、おそらく方法はありません。psいくつかのプロセス選択オプションがありますが(少なくとも私のシステムでは)状態をフィルタリングする方法はありません。man ps確認するには、システムのマニュアルページ()を確認してください。

興味のある出力ビットを見つけるためになどを使用することに注意してくださいawk。これは、Linux / Unixシェルを使用するために一般的に予想される方法です。grepこの操作を頻繁に実行して再入力したくない場合は、で定義されている.bashrcシェル関数を使用するか、類似のシェル関数を使用するか、シェルスクリプトをどこか$PATH(通常)に置くことができます。$HOME/bin

たとえば、シェル関数は1つの引数(検索状態)を使用します。

ps_for_stat() {
    ps -aux | awk {'if ($8 ==  "'"$1"'") print $8" "$11'}
}

その後、次を実行できます。ps_for_stat S

関連情報