Cuando lo hago tail -f filename
, ¿cómo salir del modo sin usar Ctrl+c
para matar el proceso?
Lo que quiero es una forma normal de dejar de fumar, como q
en top
.
Solo tengo curiosidad acerca de la pregunta, porque siento que matar el proceso no es una buena manera de dejar algo.
tail
no es interactivo; No toma comandos.man signal
para mástail
o incluso matarlo sin preocuparse. Pero si desea una alternativa, consideremost
, que tiene un modo de "seguimiento" admitidamente sub-documentado, iniciado con Shift + F, y que se puede salir limpiamente con Q.tail -f
no es eso :)Respuestas:
Como se dijo en los comentarios, Ctrl-Cno mata el
tail
proceso, que se realiza enviando una señal SIGTERM o SIGKILL (la infame-9
...); simplemente envía un SIGINT que le indicatail
que finalice el modo de avance y salga.FYI, esta es una mejor herramienta:
En
less
, puede presionar Ctrl-Cpara finalizar el modo de avance y desplazarse por el archivo, luego presionar Fpara volver al modo de avance nuevamente.Tenga en cuenta que
less +F
es defendido por muchos como una mejor alternativa atail -f
. Para ver la diferencia y las advertencias entre las dos herramientas, lea esta respuesta: ¿Es `tail -f` más eficiente que` less + F`?fuente
tail
CTRL-C no la mata y no es interactiva), creo que mi respuesta es más que apropiada.kill <pid>
hace. Para la mayoría de los programas, no hay ninguna diferencia real entreCtrl-C
(=SIGINT
),SIGTERM
y, en cierta medida,SIGKILL
. La acción predeterminada para los tres es simplemente finalizar el proceso, como si seexit()
hubiera llamado, con la excepción de queSIGKILL
noexit()
se llama a ninguno del código de modo de usuario asociado (por lo que no seatexit()
realizan limpiezas, etc.).Ctrl-C
ySIGTERM
, en particular, son completamente idénticos a menos que el programa los explique explícitamente y actúe en consecuencia. GNU tail no lo hace.exit()
ser llamado.exit()
ejecutará losatexit()
controladores y limpiará los archivos stdio abiertos (lo más importante es que vaciará los búferes de salida). UnSIGINT
controlador podría hacer esto, pero la mayoría de los programas no molestan; No sé si lotail
hace.Eso es ControlC:)
^C
( ControlC) envía un SIGINT al proceso, que se define como:Eso es exactamente lo que quieres hacer aquí, es interrumpir
tail
. No hay otra manera de lograr lo que está tratando de hacer (dejar de fumar "muy bien") y si bien otras respuestas proporcionan un medio para detenersetail
de otras maneras, no son mejores.Al presionar
^C
se intentará interrumpir una tarea en Linux: esto es perfectamente normal, y solo "no es bueno" si ese proceso está en el medio de algo y no lo está dejando terminar, y luego el único lado "no bueno" El efecto es lo que sobra de ese proceso. Como ejemplo,^C
en el medio de unmake
comando sale un software parcialmente compilado, pero está bien: una nueva ejecución demake
limpiará / reanudará donde lo dejó.fuente
make
ejemplo es un recordatorio de por qué siempre escribimos.DELETE_ON_ERROR:
en nuestros Makefiles: queremos que Make elimine los archivos intermedios parcialmente escritos cuando se entera de que uno de sus comandos recibió una señal.SIGINT
y realizar la limpieza antes de salir como se indica en el.DELETE_ON_ERROR:
ejemplo de Toby .^C
:)No puedes hacer eso. Quizás quisiste correr
tail -f somefile | less
El Ctrl ces interpretado por el subsistema tty (y por su shell) y envía una
SIGINT
señal (ver señal (7) y pty (7) ...). Ver tty desmitificado .fuente
Esto funcionaría y respondería a su pregunta, pero no es una solución particularmente satisfactoria.
Esto ejecutará el comando durante 15 segundos y luego lo matará por usted, sin tener que presionar
^C
fuente
tail
se está ejecutando. Aún así, no te equivocas, supongo.tail
mejor terminar con SIGTERM que terminar con SIGINT?Las respuestas difieren según el contexto. Para salir de la cola con elegancia, necesitará un gatillo. Suponga que está intentando monitorear la salida de una tarea que finalizará en algún momento, que puede convertirse en su desencadenante.
He usado ideas similares en el pasado.
Disfrutar.
fuente