Posted at

procs:新しいプロセス表示・検索ツール


はじめに

Linuxのプロセス表示といえばpsコマンドです。これはUNIX的にパイプで繋いだりスクリプトに組み込んだりするには使いやすいのですが、単体で使うにはちょっといまいちな部分があります。

例えば


  • 出力が色付けされない

  • 値がいわゆるhuman readable(GとかMとか単位が自動でつくやつ)でない

  • ターミナルの端で折り返す

  • 検索しづらい

といったところです。

これらを解決するために、新しくプロセスの表示と検索を行うツールを作りました。

実装言語はRustで、対象プラットフォームは今のところLinuxのみです。


リポジトリ

https://github.com/dalance/procs


インストール

Releasesから最新のバイナリをダウンロードしてPATHの通ったところに置いてください。

Rustをインストール済みの方は以下でもOKです。

cargo install procs


使い方

デフォルトの出力は以下のようになります。

まず、カラム毎に色分けされます。バイト数は自動で適切な単位になり、単位毎にも色分けされます。

%表示も同様に閾値毎に色分けされます。

デフォルトでは右端カラムはコマンドになりますが、長すぎる場合はターミナルの幅で切られます。

また、psコマンドで取得できないTCP/UDPの待ち受けポートやディスクIO(Read/Write)も表示されます。

次に検索機能です。procsは引数に検索キーワードを取ることができます。

例えば、検索キーワードをzshとした場合が以下です。

指定された引数は、数値とそれ以外で挙動が違い、デフォルトでは数値はPIDTCPUDPに、数値以外はUSERCommandにマッチします。

また、数値は完全一致、それ以外は部分一致がデフォルトです。

数値で検索した場合は以下のようになります。

指定した6000/60000/60001/16723に関連するプロセスだけが出力されています。

これらにより、ユーザ名やバイナリ名で検索したい場合はかなり多めにマッチしますし、

逆にPIDやポート番号などがはっきりわかっている場合はそのプロセスだけピンポイントにマッチします。


カスタマイズ

デフォルトの挙動を変えたい場合は、~/.procs.tomlに設定します。

$ procs --config

でデフォルト設定に対応するTOMLが出力されるので、そこから変更するのが楽です。

ファイルを抜粋すると以下のようになっています。


procs.toml

[[columns]]

kind = "Pid"
style = "BrightYellow"
numeric_search = true
nonnumeric_search = false

[[columns]]
kind = "Username"
style = "BrightGreen"
numeric_search = false
nonnumeric_search = true

...

[style]
header = "BrightWhite"
unit = "BrightWhite"

[style.by_percentage]
color_000 = "BrightBlue"
color_025 = "BrightGreen"
color_050 = "BrightYellow"
color_075 = "BrightRed"
color_100 = "BrightRed"

[style.by_state]
color_d = "BrightRed"
color_r = "BrightGreen"
color_s = "BrightBlue"
color_t = "BrightCyan"
color_z = "BrightMagenta"
color_x = "BrightWhite"

[style.by_unit]
color_k = "BrightBlue"
color_m = "BrightGreen"
color_g = "BrightYellow"
color_t = "BrightRed"
color_p = "BrightRed"
color_x = "BrightBlue"

[search]
numeric_search = "Exact"
nonnumeric_search = "Partial"


[[columns]]に表示したいカラムを列挙します。

一番上に書いたものが一番左に表示されます。

kindはそのままカラムの種類でstyleがカラムの色分けです。

(種類と色分けの完全なリストはREADMEにあります)

numeric_searchnonnumeric_searchはそれぞれ数値検索と非数値検索にマッチするかどうかの設定です。

styleには表示内容によって色を変えられるものもあり、


  • ByPercentage

  • ByState

  • ByUnit

が該当します。

例えばByUnitはバイト数表示などK,M,Gのような単位が自動でつく場合に単位毎に色分けします。

各単位に対応する色は[style.by_unit]で設定します。

[style]はヘッダ部の色設定、[search]は検索の完全一致か部分一致を数値検索、非数値検索それぞれで設定できます。


おわりに

新しく作ったプロセス表示・検索ツールprocsの紹介でした。

とりあえず自分が必要な情報だけそろえた感じなので、

追加してほしいカラムなどありましたらIssueまでどうぞ。