When you use tmux, it stores a socket so you can regain access to the detached sessions in the tmux server. These can be located in multiple places depending on your environment.

  • First tmux checks if an absolute path is given via -S.
  • If not specified, it uses the flag -L to name the socket.
  • The location where this socket is created is defined by $TMPDIR if set.
  • If not, it will be created under /tmp

This is all documented under tmux's man page

Reminds me of mktemp.

 

Now, if $TMPDIR isn't set, it will create the socket in /tmp. Sometimes this folder is cleaned and you can loose access to your tmux server. If this happen, your process will still be running, but you simply won't be able to connect.

If you run tmux list-session you will receive an error message:

$ tmux list-session
failed to connect to server: Connection refused

When you check ps aux | grep -i tmux or top or htop you can definitely see that tmux is running. If you run lsof -U you can also see the socket that tmux has open.

Now, reading through tmux's man page, you can find the answer. Under -L it says:

If the socket is accidentally removed, the SIGUSR1 signal may be sent to the tmux server process to recreate it.

Now, I also checked OpenBSD's man page and it adds a bit more of information:

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).

If it doesn't work, check the parent directories.

 

So, solution. If you're only running one tmux server, you can do:

killall -SIGUSR1 tmux

If you want to target a specific instance of tmux, you can use kill and specify the process ID.

If you want the numeric value, you can use kill -l to get a list. In the machines I have access (OS X and Linux), this is 10, but I've checked references online for other OS' and it can change.