Quando eu faço tail -f filename
, como sair do modo sem usar Ctrl+c
para matar o processo?
O que eu quero é uma maneira normal de parar, como q
no top
.
Estou curioso sobre a questão, porque sinto que matar o processo não é uma boa maneira de sair de algo.
tail
não é interativo; não aceita comandos.man signal
maistail
ou até matá-lo sem se preocupar. Mas se você quiser uma alternativa, consideremost
, que tem um reconhecidamente sob documentado "seguir" o modo, iniciado com Shift + F, e pode ser limpa terminou com Q.tail -f
não é isso :)Respostas:
Como dito nos comentários, Ctrl-Cnão elimina o
tail
processo, o que é feito enviando um sinal SIGTERM ou SIGKILL (o infame-9
...); apenas envia um SIGINT que diztail
para terminar o modo de avanço e sair.Para sua informação, esta é uma ferramenta melhor:
Em
less
, você pode pressionar Ctrl-Cpara finalizar o modo de encaminhamento e rolar o arquivo e pressionar Fpara voltar ao modo de encaminhamento novamente.Note que
less +F
é defendido por muitos como uma alternativa melhor paratail -f
. Para diferenças e ressalvas entre as duas ferramentas, leia esta resposta: `tail -f` é mais eficiente que` less + F`?fonte
tail
não é eliminada pelo CTRL-C e não é interativa), acredito que minha resposta seja mais do que apropriada.kill <pid>
faz. Para a maioria dos programas, não há diferença real entreCtrl-C
(=SIGINT
)SIGTERM
e, até certo pontoSIGKILL
,. A ação padrão para todos os três é simplesmente encerrar o processo, como seexit()
tivesse sido chamado, com a exceção de que paraSIGKILL
nenhum código do modo de usuário associadoexit()
é chamado (portanto, nenhumaatexit()
limpeza, etc.).Ctrl-C
eSIGTERM
, em particular, são completamente idênticos, a menos que o programa explique ou atue explicitamente. A cauda GNU não.exit()
ser chamado.exit()
executará osatexit()
manipuladores e limpará os arquivos stdio abertos (o mais importante é liberar os buffers de saída). UmSIGINT
manipulador poderia fazer isso, mas a maioria dos programas não se incomoda; Eu não sei setail
faz.Isso é ControlC:)
^C
( ControlC) envia um SIGINT para o processo, definido como:Isso é exatamente o que você quer fazer aqui, é interromper
tail
. Não há outra maneira de realizar o que você está tentando fazer ("muito bem" saia da cauda) e, enquanto outras respostas fornecem um meio de parartail
de outras maneiras, elas não são melhores.Pressionar
^C
tentará interromper uma tarefa no Linux - isso é perfeitamente normal e apenas "não é bom" se esse processo estiver no meio de algo e você não o deixar terminar, e então o único lado "não será bom" efeito é sobra coisas desse processo. Como exemplo,^C
no meio de ummake
comando, deixa o software parcialmente compilado, mas tudo bem: uma nova execuçãomake
limpará / retomará o processo de onde parou.fonte
make
exemplo é um lembrete de por que sempre escrevemos.DELETE_ON_ERROR:
em nossos Makefiles - queremos que o Make remova arquivos intermediários parcialmente escritos quando souber que um de seus comandos recebeu um sinal.SIGINT
e fazer a limpeza antes da saída, conforme indicado no.DELETE_ON_ERROR:
exemplo de Toby .^C
:)Você não pode fazer isso. Talvez você quisesse correr
tail -f somefile | less
O Ctrl cé interpretado pelo subsistema tty (e pelo seu shell) e envia um
SIGINT
sinal (consulte sinal (7) e pty (7) ...). Veja tty desmistificado .fonte
Isso funcionaria e responderia à sua pergunta, mas não é uma solução particularmente satisfatória.
Isso executará o comando por 15 segundos e o matará para você, sem precisar pressionar
^C
fonte
tail
está sendo executado. Ainda assim, você não está errado, eu acho.tail
melhor terminar com o SIGTERM do que com o SIGINT?As respostas diferem com base no contexto. Para sair tail -f elegantemente, você precisará de um gatilho. Suponha que você esteja tentando monitorar a saída de uma tarefa que será concluída em algum momento - que pode se tornar seu gatilho.
Eu usei idéias semelhantes no passado.
Apreciar.
fonte