Como encontrar a qual sessão do Tmux um processo pertence?

5

O caso em questão é editar um arquivo de configuração no vim e, inadvertidamente, deixá-lo aberto. Então você vai sobre o seu negócio, alterna em diferentes sessões do Tmux, eventualmente edita o mesmo arquivo de outra sessão e o vim lhe dirá que um arquivo .swp já existe.

Agora, como você encontra em qual sessão do Tmux o outro vim que mantém o arquivo aberto está? O Findw parece pesquisar apenas por meio de janelas de sessão ativas.

    
por lkraav 19.11.2010 / 13:33

2 respostas

10

lsof /path/to/.file.swp mostrará o ID do processo do processo vim ofensivo. Se você quiser escrever um script, use pid=$(lsof -Fp "$swp_file"); pid=${pid#p} para obter apenas o ID do processo.

Em seguida, ps 12345 onde 12345 é o ID do processo mostrará algumas informações sobre o processo, em particular o que está sendo executado em ( ps -o tty= -p $pid em um script). O tty identifica unicamente uma janela do tmux (assumindo que o processo está sendo executado dentro do tmux), mas eu não sei como ir do nome do tty para a sessão do tmux.

O que daria a você a sessão tmux é o valor da variável de ambiente TMUX no processo vim. O número da sessão é o último número, após a última vírgula.

A maioria dos unices tem uma maneira de descobrir o ambiente de um processo, mas o caminho difere entre variantes unix. No Linux, você pode usar </proc/$pid/environ grep -z '^TMUX=' para mostrar o valor de $TMUX no processo $pid , para poder extrair o número da sessão como $(</proc/$pid/environ grep -z '^TMUX=' | sed 's/.*,//') .

    
por 19.11.2010 / 22:28
5

Este trecho de shell funciona muito bem para mim (você também precisará do utilitário pstree):

for s in 'tmux list-sessions -F '#{session_name}'' ; do
  echo -e "\ntmux session name: $s\n--------------------"
  for p in 'tmux list-panes -s -F '#{pane_pid}' -t "$s"' ; do
    pstree -p -a -A $p
  done
done

Para duas sessões tmux com dois vim cada, recebo esta saída:

tmux session name: 0
--------------------
zsh,3444
  '-vim,3467 file_1
zsh,3474
  '-vim,3495 file_2

tmux session name: 1
--------------------
zsh,3526
  '-vim,3547 file_3
zsh,3554
  '-vim,3576 file_4
    
por 13.05.2013 / 00:47