Eu tenho um programa em execução na tela. De fato, quando eu desanexo da sessão e verifico netstat, posso ver que o programa ainda está em execução (que é o que eu quero):
udp 0 0 127.0.0.1:1720 0.0.0.0:* 3759/ruby
Agora, quero anexar novamente à sessão que está executando esse processo. Então eu inicio um novo terminal e digito screen -r
$ screen -r
There are several suitable screens on:
5169.pts-2.teamviggy (05/31/2013 09:30:28 PM) (Detached)
4872.pts-2.teamviggy (05/31/2013 09:25:30 PM) (Detached)
4572.pts-2.teamviggy (05/31/2013 09:07:17 PM) (Detached)
4073.pts-2.teamviggy (05/31/2013 08:50:54 PM) (Detached)
3600.pts-2.teamviggy (05/31/2013 08:40:14 PM) (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
Mas como sei qual é a sessão que está executando o processo que criei?
Agora, um dos documentos que encontrei disse:
"Quando você estiver usando uma janela, digite Ca A para dar um nome. Esse nome será usado na lista de janelas e ajudará você a lembrar o que está fazendo em cada janela quando começar a usar muitas janelas. "
O problema é que, quando estou em uma nova sessão de tela, tento pressionar control + a A e nada acontece.
command-line
gnu-screen
JohnMerlino
fonte
fonte
screen -r
seguida por um número 1, 2, 3 ... nessa lista de telas.Respostas:
Existem dois níveis de "listagens" envolvidos aqui. Primeiro, você tem a "lista de janelas" em uma sessão individual, e é para isso que serve o ctrl-A A; depois, há uma "lista de sessões", que você colou na sua pergunta e com o que também pode ser visualizado
screen -ls
.Você pode personalizar os nomes da sessão com o
-S
parâmetro, caso contrário, ele usa seu nome de host (teamviggy), por exemplo:(ctrl-A d para desanexar)
(ctrl-A d para desanexar)
Como bônus, você pode usar uma abreviação inequívoca do nome para o qual você passa
-S
mais tarde para se reconectar:(Estou reconectado à
myprogramrunningunderscreen
sessão)fonte
ctrl-A a
ectrl-A shift-A
. O último me levou aSet window's title to:
. Certifique-se de pressionar Shift para o segundo A. #-S
, precisará usar pelo menos uma abreviação inequívoca do nome após o número de identificação e o ponto no nome completo da sessão de tela ao reiniciar, ao contrário do modo automático. nomes de sessão gerados, onde você pode incluir o ID e o ponto.Eu tive um caso em que
screen -r
não foi possível reconectar. Adicionando a-d
bandeira para ficar assimtrabalhou para mim. Destacou a tela anterior e me permitiu recolocar. Veja a página do manual para mais informações.
fonte
Uma maneira fácil é simplesmente reconectar-se a uma tela arbitrária com
Então, quando você estiver executando a tela, poderá obter uma lista de todas as telas ativas pressionando
Ctrl-A "
(ou seja, controle-A seguido de aspas duplas). Depois, basta selecionar as telas ativas uma de cada vez e ver o que elas estão executando. A nomeação das telas facilitará, é claro, a identificação da tela certa.Apenas meus dois centavos
fonte
Costumo usar a seguinte combinação em que preciso trabalhar em várias máquinas em vários clusters:
Isso cria a nova sessão de tela onde eu posso construir o ambiente.
É isso que eu uso posteriormente para reconectar a essa sessão de tela. Os bits bacanas são que, se a sessão estiver anexada em outro lugar, ela desanexa essa outra exibição. Além disso, se não houver sessão por algum motivo peculiar, como se alguém reiniciasse meu servidor sem que eu soubesse, ele criaria uma. Finalmente. se existirem várias sessões, ele usará a primeira.
Muitos elogios para https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions para esta dica há algum tempo.
EDITAR:
Também aqui estão algumas explicações úteis
man screen
sobre parâmetros enigmáticoshá mais com
-D
isso, não deixe de conferirman screen
fonte
A saída de
screen -list
é formatada comopid.tty.host
. Os pids podem ser usados para obter o primeiro processo filho compstree
:Você receberá uma lista como esta
fonte
ou
fonte