Congela temporariamente um processo após interação com shell

1

Digamos que em um único console eu tenho o tail -F em execução, mostrando a saída de muitos arquivos de log em tempo real.

Às vezes, porém, preciso executar comandos lá e examinar sua saída brevemente, sem ser borrifado pelas rajadas de saída da cauda.

O que pode ser uma boa maneira de killall -STOP tail (ou temporariamente suspender automaticamente ) após alguma interação com o console (ou pelo menos pressionando ENTER, que invoca o Comando PROMPT, etc.), e atrasar o killall -CONT tail em 90 segundos após a última interação do shell?

Anteriormente, eu vinha fazendo manualmente:

fg  # to tail process

pressione manualmente CTRL Z

run my command,see output

bg  # to tail process
    
por Marcos 28.05.2014 / 12:26

2 respostas

1

Em muitos sistemas semelhantes ao Unix, incluindo o Linux, Controle + z é o mapeamento de teclado padrão mais comum para a sequência de chaves que suspende um processo (SIGTSTP).

fg retomará o processo em primeiro plano.

Editar

Usando a diretiva blankerprg na tela, você pode definir um programa "protetor de tela" para o seu terminal. Você pode defini-lo interativamente de dentro da tela com:

Controle + a : blankerprg tail -f /path/to/log

Controle + a : idle 10 blanker

Depois de ficar ocioso por 10 segundos, o protetor de tela que você definiu irá entrar e pressionar qualquer tecla pressionada para desativá-lo.

Essas configurações também podem ser adicionadas no ~/.screenrc .

    
por 28.05.2014 / 13:41
1

Você pode interromper o trabalho atual (o último trabalho que foi interrompido ou retomado) com

kill -STOP %%

Eu não acho que reagir depois de alguns segundos de inatividade é possível no bash. Em zsh, você pode definir o parâmetro TMOUT como um número, o que faz com que o shell execute o ALRM trap após esse $TMOUT segundos de inatividade. (O Bash tem uma atividade de TMOUT , mas faz com que o shell saia.)

O trecho zsh a seguir define uma função que suspende a tarefa em segundo plano atual até que ocorram 90 segundos de inatividade e liga essa função a Ctrl + X Ctrl + Z .

suspend_background_job_during_activity () {
  job=${1-%%}
  kill -STOP $job
  TMOUT=90
  trap "fg $job; unset TMOUT; trap - ALRM" ALRM
}
zle -N suspend_background_job_during_activity
bindkey '^X^Z' suspend_background_job_during_activity
    
por 29.05.2014 / 04:44