tmux が起動しなくなったときに確認すること

なんか tmux の調子が悪く、restore session のクルクルが止まらなくなってしまったので tmux を再起動しようとしたところ、
それ以降起動しなくなってしまった話。

起動しようと思ったところ

$ tmux
[exited]

と言われてしまって先に進まない。
いや、今停止したよね??

ためしたこと

とりあえず、セッションがおかしくなってるのかなと思って、一度 tmux-server を止めてみました。

$ tmux kill-server

で、改めて起動してみようとしたところ、

$ tmux
server exited unexpectedly

となってやっぱり起動できず。
とりあえずメッセージで検索してみます。

原因

どうやら、この状態というのは、 tmux を終了させたつもりが、tmux のプロセスがいくつか残ってることが原因らしいのです。
ということで、tmux のプロセスを探します。

$ ps aux | grep tmux
username              3389   1.2  0.0 408112336   1648   ??  S     9:51AM   0:17.66 bash /Users/username/.tmux/plugins/tmux-resurrect/scripts/tmux_spinner.sh Restoring... Tmux restore complete!
username             54216   0.0  0.0 408102576   1104 s033  S+   10:17AM   0:00.00 grep tmux
username             41358   0.0  0.0 408256832   1120 s014  S+   10:14AM   0:00.01 tmux attach -t NGM
username              2161   0.0  0.0 409367104   5600   ??  Ss    9:51AM   0:17.96 tmux new-session

このうち、2番目の grep tmux は、tmux じゃなくて grep のプロセスなのでほうっておくとして、それ以外のやつが終了せずに残ってる tmux のプロセス。いわゆるゾンビという奴でしょうか。

とにかく、grep 以外のプロセス、3309, 41358, 2161 を kill してやればよさそうです。

$ kill -9 3389
$ kill -9 41358
$ kill -9 2161

これで無事 tmux が起動できるようになりました。

kill コマンドの話

そうそう、この kill コマンドですが、名前からしてはプロセスを終了させるコマンド……と思いきや、こいつはシグナルを送るためのコマンドらしいです。

で、オプションでつけた -9SIGKILL というシグナルを送るオプションで、これが強制終了させるためのシグナルらしいです。
その後に続く数時は、プロセスの ID ですね。

ちなみにほかにどんなシグナルが送れるのかというと、kill -l で確認できます。

kill -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2

これらがどういう意味なのかというと…
この辺に詳しく載ってました。
https://www.ibm.com/docs/ja/zos/2.4.0?topic=functions-sigaction-examine-change-signal-action#rtsigac__trs1

https://unix.stackexchange.com/a/317496

とはいえ、普段使うのは多分 -9SIGKILL ぐらいなモンなきもしますね……。

参考

https://lealog.hateblo.jp/entry/2015/10/22/104911

git log --format=%ct:%s

:add extra link
:add 2023080701.md