Shell SIGKILL 键绑定

dre*_*obb 28 keyboard-shortcuts zsh shell

如何设置键绑定以将 a 发送SIGKILL到当前的前台作业?我已经知道Ctrl+CSIGINTCtrl+\SIGQUIT。我想要一个更严厉的选择。

这有什么严重不可取的吗?

lxg*_*xgr 34

不可取与否,实际上是不可能的:

Ctrl+ [?]键绑定实际上是由tty驱动,而不是由壳处理,因为只要有在前台,输入和终端的输出运行的进程将被直接转发到过程。shell 永远无法对您的按键进行操作(甚至看不到)。

您可以Ctrlstty -a;获取当前分配的+[?] 组合键的列表。然而,只有intr(SIGINT,通常绑定到Ctrl+ C) quit(SIGQUIT,通常绑定到Ctrl+ \) 和susp(SIGSUSP,通常绑定到Ctrl+ Z) 对应于实际的 unix 信号。(kill例如,不发送 SIGKILL,而是删除当前输入。)

不幸的是,无法发送进程无法禁用的两个信号之一(SIGKILL 和 SIGSTOP),因此如果所有三个提到的信号都无效,您将不得不使用其他方式(例如另一个外壳)杀死前台进程。

(实际上,除了捕获所有三个信号外,前台进程甚至可以通过将 tty 设置为“原始”模式来首先禁用特殊组合键。例如,SSH 就是这样做的——这就是它如何中继本地按下Ctrl+C到远程主机。)