なんか 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 コマンドですが、名前からしてはプロセスを終了させるコマンド……と思いきや、こいつはシグナルを送るためのコマンドらしいです。
で、オプションでつけた -9
は SIGKILL
というシグナルを送るオプションで、これが強制終了させるためのシグナルらしいです。
その後に続く数時は、プロセスの 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
とはいえ、普段使うのは多分 -9
の SIGKILL
ぐらいなモンなきもしますね……。