Tcl中可以捕获哪些linux信号

Tcl中可以捕获哪些linux信号,linux,ubuntu,tcl,signals,Linux,Ubuntu,Tcl,Signals,我正在从事一个Tcl项目,其中某个过程将持续运行。用户可以随时使用某些组合键中止该过程。因此,基本上,我需要捕获Tclcode中的信号。到目前为止,除了一个问题,一切都已完成 我正在使用Ctrl+Z即SIGSSUP信号(SIGTSTP在Tcl的情况下)技术上完成这项工作 signal trap sigtstp onAbort 但是,按下Ctrl+Z会立即返回Shell提示符,程序的其余输出随后会返回,当输出结束时,不会返回任何Shell提示符(之前已经返回过)。我需要再次按Enter以获得提示

我正在从事一个
Tcl
项目,其中某个过程将持续运行。用户可以随时使用某些组合键中止该过程。因此,基本上,我需要捕获
Tcl
code中的信号。到目前为止,除了一个问题,一切都已完成

我正在使用
Ctrl+Z
SIGSSUP
信号(
SIGTSTP
在Tcl的情况下)技术上完成这项工作

signal trap sigtstp onAbort
但是,按下
Ctrl+Z
会立即返回Shell提示符,程序的其余输出随后会返回,当输出结束时,不会返回任何Shell提示符(之前已经返回过)。我需要再次按
Enter
以获得提示

以下是我提到的案例。您可以看到提示(
polaris@ubuntu:~$
)在主程序的输出之间返回

同样作为按下Ctrl+Z的输出,它返回了
[40]+Stopped
,这有点烦人。我能避免这个吗

我是否可以使用其他组合键(即信号键)来避免整个问题?或者我可以通过使用
Ctrl+Z
也可以通过敲打一些东西来避免这种情况吗

注意:我尝试过使用
Ctrl+C
。我得到了完全预期的行为。不幸的是,我不能使用
Ctrl+C
,因为它用于其他一些功能

Cz使shell发送当前前台进程a
SIGSTOP
(19)。此信号无法捕获或忽略,因此您的程序将接收它并运行默认处理程序。这并不是像你的问题所暗示的那样扼杀这个过程。这只会挂起它,您可以使用将其恢复到前台

看来你运气不好。但是,您可以在shell级别重新绑定keychord。但这不在您的程序范围内,您的最终用户无法控制它。(参见)


此外,如果您的程序依赖于用户输入来执行各种操作(因为您建议C-C执行其他操作),也许您应该使用诅咒或其他方式将其变成一个成熟的CUI应用程序?

事实上,
Ctrl
+
z
发送一个SIGTSTP,可以拦截它。我们仍然强烈建议在发送过程中停止该过程,但是可以在发送过程中进行一些清理(例如,对终端的清理)。谢谢!我不知道。