Help us understand the problem. What is going on with this article?

tmux の unix ドメインソケットが消えた時の対処

More than 3 years have passed since last update.

誰かが消している

tmux を使っていると何故か tmux の unix ドメインソケット (以後「ソケット」) がいつの間にか消されることがあります。こうなると何が困るって、このソケットを読み書きしているコマンドが軒並み error connecting to /private/var/folders/<中略>/T/tmux-501/default (No such file or directory) というエラーメッセージを出して機能してくれなくなります。例えばtmux使用時にmanページを新規ウィンドウ表示なんて便利なものが無粋なことにエラーメッセージを吐いて停まってしまうことになります。そして detach したら最後 tmux attach してもつなぎ直せなくなります。

勝手に消されることは解決法が見つからず藁にもすがる思いで質問をしてみました。こちらは親切な方からの回答待ちです。

謎は残るがソケットは復活できる

それはそれとして、消えたソケットファイルを復活させる方法はあります。tmux のマニュアルに以下の記述があります;

If the socket is accidentally removed, the SIGUSR1 signal may be sent to the tmux server process to recreate it (note that this will fail if any parent directories are missing).

テキトーに翻訳すると

「ソケットファイルが消えたら SIGUSR1 シグナルを tmux サーバプロセスに送ると作りなおすよ (ただし親ディレクトリがないと失敗するよ)」

とかいう意味のことが書いてあります。で、そのとおり

% mkdir -m700 /private/var/folders/<中略>/T/tmux-501
% killall -SIGUSR1 tmux

とやってみると見事ソケットファイルが復活します。誰かが消している件は依然として解決しませんが、とりあえずなんとか使い続けることができそうです。

zshの関数にまとめる

このソケットファイルの在処はシェル変数 $TMUX で参照できます。そこでこれを利用してソケットを復活させる zsh の関数を書いてみます。

function tmux-remake-socket () {
    if [ ! $TMUX ]; then
        return
    fi
    tmux_socket_file=`echo $TMUX|awk -F, '{print $1}'`
    if [ ! -S $tmux_socket_file ]; then
        mkdir -m700 `dirname $tmux_socket_file` 2> /dev/null
        killall -SIGUSR1 tmux
    else
        echo tmux unix domain socket exists! nothing to do.
    fi
    unset tmux_socket_file
}

私みたいなトラブルを抱えている人はいないとは思いますが、自分のためにもまとめておきます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away