fechando terminais gnome não utilizados

4

enquanto trabalho, começo muitos terminais gnome e faço algo com eles. dd no primeiro terminal, 12 sessões ssh para um grupo de servidores para fazer alguma coisa. Essas sessões estão terminando seu trabalho e são desconectadas para inatividade ou porque a sessão é fechada após o comando.

No entanto, eu preciso de um script que feche processos gnome-terminal não utilizados. Eu pensei em matar suavemente todos os processos zsh sem processos filho. Esperamos que isso encerre o terminal de maneira limpa.

init─┬─[...]
     ├─gnome-terminal─┬─gnome-pty-helpe
     │                ├─2*[zsh───ssh]
     │                ├─zsh───dd
     │                ├─zsh───pstree
     │                ├─4*[zsh]                 <<<<
     │                └─{gnome-terminal}
     .
     .
     .

Estou pensando em escrever um script bash mais ou menos simples para verificar os processos em execução e finalizá-los, se o zsh não tiver processos filhos e nenhuma atividade por 4 horas.

Não tenho certeza

  • Se esta é uma boa ideia em geral.
  • Se alguém já publicou uma ferramenta para fazer isso
  • Se houver uma maneira de obter os processos filhos de zsh (sem grep ing e awk ing o pstree output;)
  • Como obtenho a última atividade (pensei em um comando de pré e pós no zsh)
  • Se houver uma maneira melhor do que kill -HUP <zsh pid> para finalizar os processos

Obrigado antecipadamente

    
por krissi 23.09.2010 / 17:29

2 respostas

8

De acordo com o manual do zsh

TMOUT If this parameter is nonzero, the shell will receive an ALRM signal if a command is not entered within the specified number of seconds after issuing a prompt. If there is a trap on SIGALRM, it will be executed and a new alarm is scheduled using the value of the TMOUT parameter after executing the trap. If no trap is set, and the idle time of the terminal is not less than the value of the TMOUT parameter, zsh terminates. Otherwise a new alarm is scheduled to TMOUT seconds after the last keypress.

Eu testei

zsh> export TMOUT=10        

e o terminal gnome superior morreu quando a casca parou. O mesmo mecanismo também funciona dentro do bash. Isso resolve as suas preocupações sobre a nuking de terminais ocupados, pois só começa a contar após a emissão de um prompt de shell

Eu não acho uma boa ideia em geral, pois cria eventos "mágicos" que podem potencialmente perder o estado. Eu recomendo ficar melhor com as teclas "fechar janela" e "focar outra janela (talvez um terminal)" do seu gerenciador de janelas de sua escolha. Mas se você quiser terminais poofing, este é provavelmente o melhor caminho a percorrer.

    
por 23.09.2010 / 17:48
0

Se você usar exec para iniciar seu comando (por exemplo, exec ssh *hostname* ), o gnome-terminal em que ele está rodando deve fechar quando o processo terminar (supondo que ele esteja configurado para sair do terminal quando o comando for encerrado). o padrão).

Você ainda precisaria usar o recurso de tempo limite do shell ou outros recursos inteligentes para processos suspensos, mas isso cuidaria de saídas normais ou controles remotos desconectados se você estivesse apenas tentando fechar as sessões de terminal.

    
por 23.09.2010 / 20:20

Tags