¿Cómo puedo configurar una combinación de teclas para enviar una SIGKILL
al trabajo actual en primer plano? Ya sé que Ctrl+ Ces SIGINT
y Ctrl+ \es SIGQUIT
. Me gustaría una opción más severa.
¿Hay algo seriamente desaconsejable sobre esto?
keyboard-shortcuts
shell
zsh
dibujante
fuente
fuente
zsh
, y el hecho de que la pregunta habla sobre las combinaciones de teclas. Esta es una pregunta sobre la configuraciónzsh
del editor de línea, no sobre la configuración del terminal.Respuestas:
Desaconsejable o no, en realidad es imposible:
Las combinaciones de teclas Control + [?] En realidad son manejadas por el controlador tty y no por el shell, ya que mientras haya un proceso ejecutándose en primer plano, la entrada y salida de su terminal serán enviadas directamente al proceso. El shell nunca podría actuar (o incluso ver) las pulsaciones de teclas.
Puede obtener una lista de las combinaciones de teclas Ctrl + [?] Asignadas actualmente de
stty -a
; sin embargo, solointr
(SIGINT, generalmente vinculado a Ctrl + C)quit
(SIGQUIT, generalmente vinculado a Ctrl + \) ysusp
(SIGSUSP, generalmente vinculado a Ctrl + Z) corresponden a señales Unix reales. (kill,
por ejemplo, no envía SIGKILL, pero elimina la entrada actual).Desafortunadamente, no hay forma de enviar una de las dos señales que no puede ser deshabilitada por un proceso (SIGKILL y SIGSTOP), por lo que si las tres señales mencionadas no tienen efecto, tendrá que usar otra forma ( por ejemplo, otro shell) para eliminar el proceso en primer plano.
(En realidad, además de capturar las tres señales, el proceso de primer plano puede incluso deshabilitar las combinaciones de teclas especiales en primer lugar al configurar el tty en modo "sin procesar". SSH hace esto, por ejemplo, así es como puede transmitir un Ctrl + C presionado localmente al host remoto).
fuente
Sí, hay algo desaconsejable. Estás saltando directamente de
SIGINT
laSIGKILL
señal. Sugiero, como lo hacen otras personas , mirar enviar las señalesSIGHUP
oSIGTERM
antes de emplear la opción nuclear. Luego está la desaconsejable de tener esto como un enlace clave, lo que por supuesto significa que solo funcionará cuando ZLE esté activo y el shell le solicite interactivamente entrada, no cuando los comandos se estén ejecutando. (Para ello, se le tenga que configurar el terminal, no la cáscara, y la necesidad de tener una disciplina de línea terminal que implementa el envíoSIGTERM
como una extensión del POSIX especifica el comportamiento.)En esa nota, nadie más parece haberse dado cuenta de que está preguntando sobre las combinaciones de teclas del editor de línea de shell, no el terminal. Para responder la primera parte de su pregunta, entonces:
Configura una función de shell para enviar la señal al trabajo "actual".
Luego construye un widget ZLE definido por el usuario que invoca esta función de shell.
Luego, finalmente, vincula ese widget a una clave de su elección.
fuente