Как настроить привязку клавиш для отправки SIGKILL
на текущее задание переднего плана? Я уже знаю, что Ctrl+ Cесть SIGINT
и Ctrl+ \есть SIGQUIT
. Я хотел бы более серьезный вариант.
Есть ли что-то серьезно нежелательное в этом?
keyboard-shortcuts
shell
zsh
drewrobb
источник
источник
zsh
, а также тот факт, что в вопросе говорится о сочетаниях клавиш. Это вопрос о настройкеzsh
редактора строк, а не о настройке терминала.Ответы:
Нежелательно или нет, это на самом деле невозможно:
Сочетания клавиш Control + [?] Фактически обрабатываются драйвером tty, а не оболочкой, поскольку, пока существует процесс, выполняющийся на переднем плане, ввод и вывод вашего терминала будут перенаправляться непосредственно процессу. Оболочка никогда не сможет воздействовать (или даже видеть) ваши нажатия клавиш.
Вы можете получить список назначенных в данный момент комбинаций клавиш Ctrl + [?] Из
stty -a
; однако, толькоintr
(SIGINT, обычно связанный с Ctrl + C)quit
(SIGQUIT, обычно связанный с Ctrl + \) иsusp
(SIGSUSP, обычно связанный с Ctrl + Z) соответствуют фактическим unix-сигналам. (kill,
например, не отправляет SIGKILL, но удаляет текущий ввод.)К сожалению, нет способа отправить один из двух сигналов, которые не могут быть отключены процессом (SIGKILL и SIGSTOP), поэтому, если все три упомянутых сигнала не имеют никакого эффекта, вам придется использовать другой способ ( например, другая оболочка), чтобы убить процесс переднего плана.
(На самом деле, в дополнение к перехвату всех трех сигналов, процесс переднего плана может даже отключить специальные комбинации клавиш в первую очередь, установив tty в «сырой» режим. Например, это делает SSH - так он может ретранслировать локально нажмите Ctrl + C для удаленного хоста.)
источник
Да, есть что-то нецелесообразное. Вы прыгаете прямо с
SIGINT
наSIGKILL
сигнал. Я предлагаю, как и другие люди , рассмотреть вопрос об отправке сигналовSIGHUP
или,SIGTERM
прежде чем использовать ядерный вариант. Кроме того, нежелательно иметь это в качестве привязки клавиш, что, конечно же, означает, что она будет работать только тогда, когда ZLE активен, а оболочка в интерактивном режиме запрашивает ввод данных, а не во время выполнения команд. (Для этого вам будет необходимо настроить терминал, а не оболочку, а также необходимость иметь терминальную линию дисциплину , которая реализует отправкуSIGTERM
как расширение POSIX указанного поведения.)На этом замечании, кажется, никто еще не заметил, что вы спрашиваете о привязках клавиш редактора командной строки, а не о терминале. Чтобы ответить на первую часть вашего вопроса, тогда:
Вы настраиваете функцию оболочки для отправки сигнала «текущей» работе.
Затем вы создаете пользовательский виджет ZLE, который вызывает эту функцию оболочки.
Затем, наконец, вы связываете этот виджет с ключом по вашему выбору.
источник