Muchas veces accidentalmente ejecuto el cat
comando en archivos que tienen contenidos de hasta miles de líneas.
Intento matar el cat
comando con Ctrl+ Co Ctrl+ Z, pero ambos solo surten efecto después de que cat
se muestra la salida total de en el terminal, por lo que tengo que esperar hasta que cat
se ejecute por completo.
¿Existe una mejor solución que evite esperar? Porque a veces los archivos tienen un tamaño de hasta 100 MB, y se vuelve irritante esperarlo.
Estoy usando tcsh
.
curiosity
alias curiosity='sudo killall cat'
Respuestas:
Si el (los) archivo (s) en cuestión contienen muchos datos, el envío de la señal puede llegar
cat
antes de que finalice. Lo que realmente observa es la velocidad finita de su terminal:cat
envía los datos al terminal y el terminal tarda un tiempo en mostrarlos todos.Recuerde que, por lo general, tiene que volver a dibujar la ventana de salida completa para cada línea de salida (es decir, mover el contenido de la ventana una línea hacia arriba e imprimir la siguiente línea en la parte inferior). Si bien existen técnicas y algoritmos para hacer esto más rápido que si se hiciera de manera directa, todavía lleva algo de tiempo.
Por lo tanto, si desea deshacerse de la salida lo más rápido posible, oculte la ventana de terminal , ya que generalmente no se realiza un redibujo real. En un entorno gráfico, esto puede significar minimizar la ventana o cambiar a un escritorio virtual diferente, en la consola virtual de Linux simplemente cambie a otro (( Ctrl+) Alt+ ).Fx
También tenga en cuenta que si ejecuta esto a través de un enlace de red lento (SSH a través de una conexión GSM, por ejemplo), definitivamente vería una salida mucho menor antes
cat
de que la señal lo matara, porque la velocidad del terminal ya no sería el cuello de botella. .fuente
~?
para ver las opciones disponibles (se~.
cierra).tty-stop-output
. Luego puede enviar Ctrl + C. Para reanudar la salida, presione Ctrl + Q ...Configuración de terminal
Creo que esto tiene más que ver con la forma en que se configura el terminal, que con cualquier problema de almacenamiento en búfer. Verifique la salida de
stty -a | grep intr
, debe tenerintr = ^C;
en la línea de salida si Ctrl- Cestá habilitado entty
/pty
. Si no es así, puede usarlostty intr ^C
para habilitarlo. Agregue la línea a su.tcshrc
o.login
para que sea permanente (¡o elimine la línea que la cambia en primer lugar!).El no Ctrl- C, también puede intentar el envío
SIGQUIT
con Ctrl- \. Si esto no funciona, vuelva a verificarstty -a | grep quit
si está configurado correctamente.Configuración del emulador de terminal
También verifique la configuración de su emulador de terminal (si está usando uno), puede ser que haya un acceso directo configurado en este nivel (tal vez para copiar o algo) y el Ctrl- Cno alcanza el
pty
nivel. También se puede configurar un acceso directo en otro lugar de su entorno de escritorio o sistema de Windows.Una buena prueba en Linux si está utilizando un emulador de terminal es cambiar a una consola Linux ( Ctrl- Alt- F1), iniciar sesión allí y ver si ocurre el mismo comportamiento. Si no es así, esto sugiere que el problema radica en su sistema de Windows o emulador de terminal.
Podría ser un problema con el retraso entre los datos que se leen desde el
pty
dispositivo como lo sugiere peterph . Pero si este es el caso y usted realmente tiene que esperar minutos para que se muestren los datos, entonces seguramente el emulador de terminal es de amortiguación manera demasiados datos (o su PC es muy lento). La respuesta sería encontrar una manera de reducir ese tamaño de búfer en la configuración del emulador de terminal o usar una diferente.Consejo extra
Algo más que vale la pena agregar; Por lo general, termino en la
cat
situación fuera de control cuando accidentalmentecat
un archivo binario. El otro efecto de esto puede ser arruinar la configuración de su terminal (si los datos binarios coinciden con varios códigos de escape de terminal, lo que a menudo sucede). Sitput
está instalado (generalmente es por defecto), puede evitar tener que reiniciar con el siguiente comando:fuente
Esta es la
tmux
opciónc0-change-interval
y estác0-change-trigger
diseñado para. De todos modos, debe usar un administrador de pantalla para la sesión reanudable.fuente
La opción Ctrl- Oha estado en Unix desde los 110 días en baudios. Los comandos de gato fuera de control siempre fueron un problema cuando se volcó un archivo ASCII largo en el dispositivo de salida lenta y se colocó todo el archivo en el búfer de salida del controlador del dispositivo. Ctrl- Oiniciaría la descarga del búfer y un seguimiento Ctrl- Odesactivaría la descarga para que el gato pudiera leerse a la velocidad normal. Ctrl- Ose ingresó y todo el archivo se enjuagaría y devolvería rápidamente un símbolo del sistema.
Se desconoce si los codificadores de controladores de dispositivos Linux sintieron o no la necesidad de continuar agregando esta característica. Esta característica se agregó en el nivel del controlador del dispositivo donde Ctrl- Sy Ctrl- Qsolo se pudo implementar. Usé esto para volcar grandes ejecuciones de depuración con mucha impresión de cheques y luego desplazarme hacia el lugar que necesitaba ver.
fuente
Al usar bash, puede suspender el trabajo usando Ctrl+ Zy luego matarlo, ya sea usando el PID o siguiendo las respuestas de https://stackoverflow.com/questions/1624691/linux-kill-background-task (por ejemplo, kill -9 %%)
fuente
tcsh
y Ctrl + Z no funciona ... ya lo dije en cuestión.abra una nueva consola, por ejemplo, haciendo clic en el icono de la consola o presionando Ctrl+ Alt+ F2. Ahí entra
y cat será asesinado a menos que tenga un bloqueo NFS rancio o una situación de "suspensión ininterrumpida" (lea en un sector defectuoso sin tiempo de espera establecido).
fuente
cat
, se trata de lo que secat
ha escrito en el terminal antes de morir y aún no se ha leído ni procesado ni mostrado por el emulador de terminal (y está sentado en un búfer (alrededor de 64 kB en Linux) dentro del controlador pty) .drop_caches
controla las páginas utilizadas como caché por el kernel (generalmente para un sistema de archivos), no los búferes internos de terminales, controladores de red y demás; si lo hiciera, tendría consecuencias muy graves, como señaló Stéphane (básicamente perderías datos) .killall -9 cat
mataría también a otras instancias de gato que aún podrían estar haciendo cosas buenas en otros hilos de proceso?Puedes probar con esto
Restablecer el uso de la pantalla -ctrlj
Si cat todavía se está ejecutando, abra una nueva terminal y ejecute este
pkill -9 -f cat
"Esto eliminará todos los procesos de cat".fuente
pkill -f cat
en mi escritorio mataría el área de la bandeja del sistema de la barra de tareas de Xfce4.