什么是可以在Tcl

时间:2016-11-22 11:50:46

标签: linux ubuntu tcl signals

我正在开展Tcl项目,其中某个程序将持续运行。用户可以使用某些键组合随时中止该过程。所以基本上,我需要在trap代码中Tcl信号。到目前为止,除了一个问题外,一切都已完成

我正在使用Ctrl+Z,即SIGSUSP信号(在Tcl的情况下为SIGTSTP),这在技术上完成了这项工作。

signal trap sigtstp onAbort

但是,按Ctrl+Z会立即返回Shell提示符,程序的其余输出将在此之后出现,当输出结束时,不会返回shell提示符(因为它之前已经返回)。我需要再次按Enter才能得到提示。

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

enter image description here

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

使用其他键组合即信号可以避免这整个问题吗?或者我可以通过调整某些内容来Ctrl+Z避免这种情况吗?

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

1 个答案:

答案 0 :(得分:2)

C z 导致shell发送当前前台进程SIGSTOP(19)。无法捕获或忽略此信号,因此您的程序将接收它并运行默认处理程序。这并不是因为你的问题暗示你正在努力杀死这个过程。这只会暂停它,您可以使用fg on most modern shells将其恢复到前台。

看起来你运气不好。但是,您可以在shell级别重新绑定键盘。这不在你的程序之内,你的最终用户无法控制它。 (参见https://superuser.com/questions/378018/how-can-i-do-ctrl-z-and-bg-in-one-keypress-to-make-process-continue-in-backgroun

另外,如果你的程序依赖于各种操作的用户输入(因为你建议C-c做其他事情),也许你应该使用curses或其他东西使它成为一个完整的CUI应用程序?

相关问题