¿Qué hacer cuando Ctrl-C no matará el trabajo en ejecución?

98

A veces, los procesos ignoran la señal SIGINT enviada por Ctrl- Cen Bash. Por ejemplo, many vi. Suponiendo que no desea buscar en Google o leer el manual sobre cómo salir del proceso en ejecución, ¿hay alguna secuencia de teclas que siempre funcione (sin salir del terminal)?

Olivier Lalonde
fuente

Respuestas:

141

Envíe la señal SIGQUIT con Ctrl+ \.

.. $ sleep 10
^\Quit

→ Esto es equivalente a kill -3 pid. Los programas que se ejecutan en el espacio de usuario no ignoran sigquit.

También hay un conjunto de atajos de teclado Magic SysRq . Uno de los más interesantes es este: Alt+ SysRq+ k. Mata todos los procesos en la consola virtual actual. Si uno de sus ttys está completamente roto, puede usarlo para regresar . En el tty que ejecuta X.org, se puede usar para matar a X sin piedad.

La tecla SysRq es, en la mayoría de los teclados, la misma que la tecla Imprimir. En mi cuaderno, se puede invocar usando la tecla Fn; Es decir, Alt → Fn → Imprimir → k en ese orden.

Estos son algunos de los atajos básicos de gestión de procesos:

  • Ctrl+ Z: pausa un proceso (más bgpara reanudar en segundo plano, fgsubir a primer plano)
  • Ctrl+ C: pide cortésmente que el proceso se cierre ahora
  • Ctrl+ \: mata sin piedad el proceso que está actualmente en primer plano
  • Alt+ SysRq+ s: Escribe datos en el disco (siempre haz esto antes de matar cualquier cosa importante)
  • Alt+ SysRq+ s, k: Matar sin piedad a todos los procesos actuales en una consola virtual dado
  • Alt+ SysRq+ s, b: Piedad reiniciar sin desmontar,
  • Alt+ SysRq+ r, e, i, s, u, b: De forma segura r eboot e ven i f el s istema es u tterly b roken,

Nota: Ctrl+ Z, en contraste con Ctrl+ Cy Ctrl+ \, también funciona para man, vi, less, y similares.

En caso de duda, el siguiente procedimiento casi siempre funcionará:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^ Z, por supuesto, indica que se ha presionado Ctrl+ Z.


Para una mirada más profunda a los depósitos y terminales, vea también mis respuestas sobre:

Stefano Palazzo
fuente
3
Funciona para "dormir 10" pero aún no funciona para "hombre" o "vi". Obviamente "kill -9 pid" funciona para matar ambos procesos. ¿Me estoy perdiendo de algo?
Olivier Lalonde
3
Ctrl + Z funciona con cosas como less, man, vi, etc. Luego puede matarlos haciendo un pspara ver su identificación de proceso y matarlos usando kill pido, si no le importan otras instancias del programa killall vi,. En cualquier caso, Ctrl-Z siempre parece funcionar.
Stefano Palazzo
55
También puede hacer kill %%para matar el último trabajo y kill %5donde 5 es el número de trabajo que se muestra en jobs.
Olivier Lalonde
2
Ctrl- \ envía un SIGQUIT , no un SIGKILL. Hay algunas diferencias importantes entre SIGQUIT y SIGKILL. en.wikipedia.org/wiki/SIGQUIT
Juliano
44
¿Cómo presiono Ctrl+ \ cuando no hay una \ tecla en la distribución de mi teclado?
Forivin
14

Puedes probar Ctrl+\

Benjamín
fuente
1
No funciona con ninguno mano vi.
Hippo
1
ubuntu 16.04 trabajado
kRazzy R
8

A veces CTRL+Cse envía al programa o canal de entrada incorrecto. Esto es especialmente común con editores como vi, con comandos con salida canalizada, comandos bash complejos que involucran bucles, etc.

Una solución simple y rápida es suspender el trabajo CTRL+Zy luego eliminarlo por número de trabajo: kill %1o kill -9 %1, etc.

tylerl
fuente
6
  • Pruebe uno de estos:

    Ctrl+4

    Ctrl+\


  • O:

    Ctrl+ Zy luego ejecuta:

    kill %1

¿Dónde %1está el número de empleos que se devolvió al pulsar Control- Z. Añadir -9para forzar la muerte.


Cuando estás en la consola de texto, también puedes probar: Ctrl- SysRq. El núcleo debería matar el proceso.

O SysRq- k, matar a todos los procesos en la consola virtual actual (puede matar programas X y SVGAlib también).

Nota: Cuando las teclas mágicas SysRq se usan para matar un programa gráfico congelado, el programa no tiene posibilidad de restaurar el modo de texto. Esto puede hacer que todo sea ilegible.

Ver: tecla Magic SysRq y sus combinaciones de comandos.

kenorb
fuente
3

Para dejar el hombre , use q Para dejar vi use:q

antivirtel
fuente
0

Es posible que haya cambiado el acceso directo de copia de:

CTRL+ SHIFT+C

A

CTRL+C

De esa manera, cuando intentas matar un proceso, el CTRL+ Cno funciona.

Intente reemplazar el acceso directo de copia a CTRL+ SHIFT+ C.

Minter
fuente
1
¡Cambiar el acceso directo de copia es irrelevante para forzar la finalización de un proceso!
SuB
¿Puedes por favor ampliar un poco tu respuesta? Paso a paso sería ideal, principalmente para que el OP pueda seguir su sugerencia. :)
ThatGuy
Esto realmente me ayudó. Estoy acostumbrado a CTRL + C en MacOS, y no me di cuenta de que el comando Ubuntu era CTRL + SHIFT + C
piel de rata
-1

Prueba Ctrl+ Alt+Backspace

Si está utilizando ubuntu 10.04, desea habilitar esta clave para que funcione.

Para habilitar Control- Alt-Backspace

Ir al sistema -> Preferencias -> Teclado

Seleccione la pestaña Diseños y haga clic en Opciones de diseño .

Seleccione Secuencia de teclas para matar el servidor X y habilitar Control+ Alt+Backspace .

Nota:

Prensado Ctrl- Alt- Backspaceva a reiniciar el servidor X.

karthick87
fuente
Edité la pregunta para dejar en claro que quiero matar el proceso desde el terminal.
Olivier Lalonde