Wie kann ich eine Tastenkombination einrichten, um eine SIGKILL
an den aktuellen Vordergrundjob zu senden ? Ich weiß bereits, dass Ctrl+ Cist SIGINT
und Ctrl+ \ist SIGQUIT
. Ich hätte gerne eine strengere Option.
Gibt es irgendetwas, von dem ernsthaft abgeraten wird?
keyboard-shortcuts
shell
zsh
drewrobb
quelle
quelle
zsh
und die Tatsache, dass es sich bei der Frage um Tastenkombinationen handelt , nicht notiert . Dies ist eine Frage zum Konfigurierenzsh
des Zeileneditors und nicht zum Einrichten des Terminals.Antworten:
Nicht ratsam oder nicht, es ist tatsächlich unmöglich:
Die Tastenkombinationen Strg + [?] Werden tatsächlich vom tty-Treiber und nicht von der Shell verarbeitet, da die Eingabe und Ausgabe Ihres Terminals direkt an den Prozess weitergeleitet werden, solange ein Prozess im Vordergrund ausgeführt wird. Die Shell würde niemals in der Lage sein, auf Ihre Tastendrücke zu reagieren (oder sie sogar zu sehen).
Sie können eine Liste der aktuell zugewiesenen Strg + [?] - Tastenkombinationen abrufen von
stty -a
; Allerdings entsprechen nurintr
(SIGINT, normalerweise an Strg + Cquit
gebunden)susp
(SIGQUIT, normalerweise an Strg + \ gebunden) und (SIGSUSP, normalerweise an Strg + Z gebunden) den tatsächlichen Unix-Signalen. (kill,
Sendet beispielsweise kein SIGKILL, löscht jedoch die aktuelle Eingabe.)Leider gibt es keine Möglichkeit, eines der beiden Signale zu senden, die nicht durch einen Prozess deaktiviert werden können (SIGKILL und SIGSTOP). Wenn also alle drei genannten Signale keine Wirkung haben, müssen Sie eine andere Methode verwenden ( zB eine andere Shell), um den Vordergrundprozess abzubrechen.
(Tatsächlich kann der Vordergrundprozess nicht nur alle drei Signale erfassen, sondern auch die speziellen Tastenkombinationen deaktivieren, indem der tty-Modus auf "raw" gesetzt wird. Dies kann beispielsweise durch SSH weitergeleitet werden eine lokal gedrückte Strg + C auf dem Remote-Host.)
quelle
Ja, da ist etwas nicht ratsam. Sie springen direkt vom
SIGINT
zumSIGKILL
Signal. Ich schlage vor, wie andere Leute auch , das Senden der SignaleSIGHUP
oder zuSIGTERM
prüfen, bevor sie die nukleare Option anwenden. Dann ist es nicht ratsam, dies als Tastenzuordnung zu verwenden, was natürlich bedeutet, dass es nur funktioniert, wenn ZLE aktiv ist und die Shell Sie interaktiv zur Eingabe auffordert, nicht, wenn Befehle ausgeführt werden. (Dazu müssten Sie das Terminal und nicht die Shell konfigurieren und über eine Terminalleitungsdisziplin verfügen, die das SendenSIGTERM
des von POSIX angegebenen Verhaltens als Erweiterung implementiert .)In diesem Sinne scheint noch niemandem aufgefallen zu sein, dass Sie nach den Tastenkombinationen des Shell-Line-Editors fragen, nicht nach dem Terminal. Um den ersten Teil Ihrer Frage zu beantworten, dann:
Sie richten eine Shell-Funktion ein, um das Signal an den "aktuellen" Job zu senden.
Anschließend erstellen Sie ein benutzerdefiniertes ZLE-Widget, das diese Shell-Funktion aufruft.
Anschließend binden Sie das Widget an einen Schlüssel Ihrer Wahl.
quelle