Jak skonfigurować przypisanie klawiszy, aby wysłać SIGKILL
zadanie do bieżącego zadania na pierwszym planie? Wiem już, że Ctrl+ Cjest SIGINT
i Ctrl+ \jest SIGQUIT
. Chciałbym bardziej surową opcję.
Czy jest w tym coś poważnie niewskazanego?
keyboard-shortcuts
shell
zsh
drewrobb
źródło
źródło
zsh
, a także faktu, że pytanie mówi o skrótach klawiszowych. To pytanie dotyczy konfiguracjizsh
edytora linii, a nie konfiguracji własnego terminalu.Odpowiedzi:
Niewskazane czy nie, w rzeczywistości jest to niemożliwe:
Skróty klawiszowe Control + [?] Są obsługiwane przez sterownik tty, a nie przez powłokę, ponieważ dopóki na pierwszym planie działa proces, dane wejściowe i wyjściowe terminala będą przekazywane bezpośrednio do procesu. Powłoka nigdy nie byłaby w stanie oddziaływać (ani nawet widzieć) na naciśnięcia klawiszy.
Możesz uzyskać listę aktualnie przypisanych kombinacji klawiszy Ctrl + [?] Od
stty -a
; jednak tylkointr
(SIGINT, zwykle związany z Ctrl + C)quit
(SIGQUIT, zwykle związany z Ctrl + \) isusp
(SIGSUSP, zwykle związany z Ctrl + Z) odpowiadają rzeczywistym sygnałom unix. (kill,
na przykład nie wysyła SIGKILL, ale usuwa bieżące dane wejściowe).Niestety nie ma sposobu na wysłanie jednego z dwóch sygnałów, których proces nie może wyłączyć (SIGKILL i SIGSTOP), więc jeśli wszystkie trzy wspomniane sygnały nie przyniosą efektu, musisz użyć innego sposobu ( np. kolejna powłoka), aby zabić proces pierwszego planu.
(W rzeczywistości, oprócz przechwytywania wszystkich trzech sygnałów, proces pierwszego planu może nawet wyłączyć specjalne kombinacje klawiszy w pierwszej kolejności, ustawiając tty na tryb „raw”. SSH robi to na przykład - w ten sposób może przekazywać lokalnie wciśnięty klawisz Ctrl + C na zdalnym hoście).
źródło
Tak, jest coś niewskazanego. Skaczesz bezpośrednio z sygnału
SIGINT
naSIGKILL
sygnał. Sugeruję, podobnie jak inni ludzie , rozważenie wysłania sygnałówSIGHUP
lubSIGTERM
przed zastosowaniem opcji jądrowej. Następnie jest niewskazana, aby mieć to jako powiązanie klucza, co oczywiście oznacza, że będzie działać tylko wtedy, gdy ZLE jest aktywny, a powłoka interaktywnie monituje o podanie danych wejściowych, a nie podczas wykonywania poleceń. (Do tego pan będzie trzeba skonfigurować terminal, a nie powłoki, i trzeba mieć dyscyplinę końcową linię, która implementuje podającSIGTERM
jako przedłużenie POSIX określonego zachowania).W tej notatce nikt jeszcze nie zauważył, że pytasz o skróty klawiszowe edytora linii powłoki, a nie terminal. Aby odpowiedzieć na pierwszą część pytania, wówczas:
Skonfigurowałeś funkcję powłoki, aby wysłać sygnał do „bieżącego” zadania.
Następnie konstruujesz widget zdefiniowany przez użytkownika ZLE, który wywołuje tę funkcję powłoki.
Następnie w końcu przypisujesz ten widget do wybranego klucza.
źródło