
希望するフィルターをインタラクティブ モード (o を押す) で適用できます。これらをバッチ モードで取得する方法はありますか。
私はprocps-ngバージョン3.3.10を使用しています。ありがとうございます。
答え1
によるとマニュアルページでは、-p
コマンドライン オプションを使用して、読み取りを行うプロセスを制限できますtop
。対話モードとまったく同じようにフィルタリングできるわけではないようですが、 の出力を調べることで、基本的に同じ結果を得ることができますps
。
3 つ以上のスレッドを持つプロセスのみを例に挙げます。
$ ps -eLf | awk '$6 ~ /^[0-9]+$/ { if ($6 > 3) { print $2; } }' | sort -u
私のコンピューターでは、これにより、関連するすべてのプロセスのリストが各行に 1 つずつ出力されます。ps
プロセスの詳細リストが生成され、awk
コマンドによってフィルター処理され、sort
重複が削除されます。
使用にあたっては、 のどの列ps
が必要かを確認してください。私のコンピュータでは、スレッド数 ("NLWP") は 6 番目の列 ( $6
) で、プロセス ID ("PID") は 2 番目の列 ( $2
) です。コマンドでこれらをawk
必要に応じて調整し、必要なフィルターに一致させます。 が$6
2 回表示されることに注意してください。1 回目は、それが数値であってヘッダーではないことを確認するため、2 回目は、それが 3 より大きいことを確認するためです。
このコマンドを実行した後、プロセスIDを に渡す必要がありますtop
。Bashやおそらく他のシェルでは、プログラムの出力を別のプログラムに引数として渡すことができるので、最終的なコマンドは次のようになります。
$ top $(ps -eLf | awk '$6 ~ /^[0-9]+$/ { if ($6 > 3) { print "-p"$2; } }' | sort -u) ... And other options
"-p"
出力が で機能するようにするために追加されましたtop
。必要に応じてこのコマンドをフィルターとシェルに合わせて調整し、バッチにドロップすると、機能するはずです。
注: フィルターを追加するには、おそらく awk を学習する必要があります。それほど難しくはありません。