Bagaimana saya bisa mengatur ikatan kunci untuk mengirim SIGKILL
ke pekerjaan latar depan saat ini? Saya sudah tahu bahwa Ctrl+ Cadalah SIGINT
dan Ctrl+ \adalah SIGQUIT
. Saya ingin opsi yang lebih parah.
Apakah ada sesuatu yang serius tidak disarankan tentang ini?
keyboard-shortcuts
shell
zsh
drewrobb
sumber
sumber
zsh
, dan fakta bahwa pertanyaan tersebut berbicara tentang keybindings. Ini adalah pertanyaan tentang mengkonfigurasizsh
editor baris, bukan tentang mengatur terminal seseorang.Jawaban:
Tidak disarankan atau tidak, itu sebenarnya tidak mungkin:
Binding key Control + [?] Sebenarnya ditangani oleh driver tty dan bukan oleh shell, karena selama ada proses yang berjalan di latar depan, input dan output terminal Anda akan diteruskan langsung ke proses. Shell tidak akan pernah bisa bertindak atas (atau bahkan melihat) penekanan tombol Anda.
Anda bisa mendapatkan daftar kombinasi tombol Ctrl + [?] Yang saat ini ditetapkan dari
stty -a
; Namun, hanyaintr
(SIGINT, biasanya terikat ke Ctrl + C)quit
(SIGQUIT, biasanya terikat ke Ctrl + \) dansusp
(SIGSUSP, biasanya terikat ke Ctrl + Z) sesuai dengan sinyal unix yang sebenarnya. (kill,
misalnya, tidak mengirim SIGKILL, tetapi menghapus input saat ini.)Sayangnya, tidak ada cara untuk mengirim salah satu dari dua sinyal yang tidak dapat dinonaktifkan oleh suatu proses (SIGKILL dan SIGSTOP), jadi jika ketiga sinyal yang disebutkan tidak memiliki efek, Anda harus menggunakan cara lain ( misalnya shell lain) untuk mematikan proses foreground.
(Sebenarnya, selain menangkap ketiga sinyal, proses latar depan bahkan dapat menonaktifkan kombinasi tombol khusus di tempat pertama dengan mengatur tty ke mode "mentah". SSH melakukan ini, misalnya - ini adalah bagaimana ia dapat menyampaikan Ctrl + C yang ditekan secara lokal ke host jarak jauh.)
sumber
Ya, ada sesuatu yang tidak disarankan. Anda melompat langsung dari
SIGINT
keSIGKILL
sinyal. Saya menyarankan, seperti yang dilakukan orang lain , melihat pengirimanSIGHUP
atauSIGTERM
sinyal sebelum menggunakan opsi nuklir. Lalu ada ketidaksanggupan memiliki ini sebagai pengikat kunci, yang tentu saja berarti bahwa itu hanya akan berfungsi ketika ZLE aktif dan shell secara interaktif meminta Anda untuk input, bukan ketika perintah sedang berjalan. (Untuk itu, Anda akan perlu mengkonfigurasi terminal, tidak shell, dan kebutuhan untuk memiliki disiplin baris terminal yang mengimplementasikan mengirimkanSIGTERM
sebagai ekstensi POSIX ditentukan perilaku.)Pada catatan itu, tidak ada orang lain yang tampaknya telah memperhatikan bahwa Anda bertanya tentang keybindings editor baris shell, bukan terminal. Untuk menjawab bagian pertama dari pertanyaan Anda, maka:
Anda mengatur fungsi shell untuk mengirim sinyal ke pekerjaan "saat ini".
Kemudian Anda membuat widget ZLE yang ditentukan pengguna yang menjalankan fungsi shell ini.
Kemudian, akhirnya, Anda mengikat widget itu ke kunci pilihan Anda.
sumber