automatic-rename on で使っているとステータスラインのwindow nameにそのとき実行しているプロセス名が表示されるが、makeなんかしているときは表示が頻繁に変わって目障りでもある。
いったいどんなふうにプロセス名を決めているのかtmux/osdep-freebsd.c (r2849)をよんでみると、
- ウィンドウのアクティブ・ペーンの端末を対象に
- 端末のフォアグラウンド・プロセス・グループID(=グループ・リーダー)を調べて(tcgetpgrp)
- sysctlでプロセスグループに属するプロセスの一覧をとってきて
- グループ内プロセスの中からいちばんいいプロセスを選択
- ただしプロセスの制御端末がペーンの端末になっていること
tmux的にいちばんいいプロセスとは、BSD系だとこんなかんじ:
- SRUN(実行可能) or SIDL(プロセスができたばかり)なのがよい
- SSTOP(C-zとかデバッガで止められている) or SZOMB(死んでる)なのはだめ
- CPUを使っている方がよい(psコマンドのcpuで出てくるやつ) (dragonflyにはない)
- 寝てる時間が多いのはだめ (dragonflyにはない)
- P_SINTR(寝てるけど割り込み可)なのがよい (openbsdのみ)
- それでも差がつかなかったら、コマンド名が辞書順で先なのを選ぶ (netbsdにはない)
- それも同じだったら、pidが大きい方を選ぶ
この大袈裟なロジックのおかげでmakeを走らせていると頻繁にステータスラインが変化するんだな。
osdep-darwin.cだと端末のフォアグラウンド・プロセス・グループ・リーダー p_comm を表示、osdep-linux.cだと端末のフォアグラウンド・プロセス・グループ・リーダーの/proc/.../cmdlineからargv[0]を表示するようだ。これならmakeを実行中はずっと make と表示されるはずだ。BSD系もこのくらいでいいんじゃないか?















