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系もこのくらいでいいんじゃないか?

koie