Por que minha segunda sessão do tmux não é mostrada em ps aux ou htop, mas nas sessões de lista do tmux, é?

1

Eu inicio duas novas tmux sessões, o nome da sessão é construído de forma variável a partir de um timestamp. (os comandos criam uma nova sessão tmux desanexada, que primeiro modifica o diretório, lista o conteúdo e abre o bash, para manter a sessão aberta)

 tmux new -d -s tmux-s1-2014-12-04-16-12-12-103728 'cd /home/user/dir/ect/; ls; bash'
 tmux new -d -s tmux-s2-2014-12-04-16-12-12-103728 'cd /home/user/dir/ory/; ls; bash'

Agora, se eu for htop ou ps aux para ver se eles ainda estão em execução, sempre localizo apenas um deles. (por exemplo, ps aux | grep tmux )

user     13556  0.0  0.0  26288  1716 ?        Ss   16:12   0:00 tmux new -d -s tmux-s1-2014-12-04-16-12-12-103728 cd /home/user/dir/ect/; ls; bash
user     13686  0.0  0.0   8072   864 pts/1    S+   16:14   0:00 grep tmux

No entanto, quando eu uso tmux list-sessions , ambos estão listados:

tmux-s1-2014-12-04-16-12-12-103728: 1 windows (created Thu Dec  4 16:12:20 2014) [80x23]
tmux-s2-2014-12-04-16-12-12-103728: 1 windows (created Thu Dec  4 16:12:20 2014) [80x23]

editar:

Agora testei um pouco mais e, pelo que entendi agora, as sessões desconectadas são invisíveis para htop / ps .. por motivos. A primeira sessão estabelecida será visível, mesmo que seja desanexada.

Eu criei três sessões, todas com bash e desvinculei a primeira e a segunda sessão. A terceira sessão ainda está anexada. Aqui está a saída de htop ao filtrar tmux .

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
17382 user       20   0 26296  1808  1176 S  5.0  0.1  0:00.86 ├─ tmux new -s first_session
17641 user       20   0 17552  1164   908 S  0.0  0.0  0:00.00 │  │  └─ tmux attach -t third_session

Considerando que tmux list-sessions ainda mostrará todos os três:

first_session: 1 windows (created Fri Dec  5 10:35:11 2014) [80x23]
second_session: 1 windows (created Fri Dec  5 10:35:23 2014) [80x23]
third_session: 1 windows (created Fri Dec  5 10:35:37 2014) [80x23] (attached)

A questão ainda é a mesma .. Por que htop ou ps aux não consegue listar todas as sessões separadas e anexadas?

    
por Daedalus Mythos 04.12.2014 / 16:22

1 resposta

1

Tmux by default will only run one server process per user, and this server process can have multiple sessions. A Tmux client and the server communicate via a Unix domain socket in the /tmp directory. The -L option can be used to specify a different socket; a new server is created for each socket.

Fonte: link

As sessões do tmux não são exibidas por ps ou htop porque elas não são processos. Como você descobriu, o único processo do servidor tmux que hospeda todas as sessões para o seu usuário aparece, junto com qualquer processo do cliente tmux que possa ser anexado à (s) sua (s) sessão (ões). O que você verá na lista de processos são quaisquer shells e outros processos-filhos que você chamou em painéis e janelas de suas sessões tmux.

Confira esta saída parcial de pstree -ap de uma máquina Linux em que estou executando o tmux:

  |-sshd,3406
  |   |-sshd,18196
  |       '-sshd,18201
  |           '-bash,18202
  |               '-tmux,18297 att
  |-tmux,10496 new-session -s main
  |   |-bash,10497
  |   |   '-ssh,10584 otherhost.mydomain.local
  |   |-bash,17650
  |   '-bash,18303
  |       |-less,18390
  |       '-pstree,18389 -ap
  |   '-bash,18487
  |       '-cat,18573 - this-is-in-another-session

Você pode ver meu processo do servidor tmux (10496). A primeira sessão que criei tem 3 painéis (todos executando bash ). Um é ssh'd para outro host. Outro está sentado em um prompt, e por isso não tem filhos. E o terceiro está exibindo pstree output em less . Você também pode ver meu processo do cliente tmux (18297).

Esses 3 painéis estão em uma sessão anexada.

Eu tenho outra sessão com um painel executando bash e o processo cat que você vê. Isso é desanexado, mas ainda é um filho do único processo do servidor tmux.

    
por 05.12.2014 / 11:23