gpt4 book ai didi

linux - 什么是可以在 Tcl 中捕获的 linux 信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:04 24 4
gpt4 key购买 nike

我正在做一个 Tcl 项目,其中某个过程将连续运行。用户可以随时使用一些组合键中止该过程。所以基本上,我需要在 Tcl 代码中 trap 信号。至此,除了一个问题,其他都搞定了。

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

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,因为它用于某些其他功能。

最佳答案

Cz 导致 shell 向当前前台进程发送 SIGSTOP(19)。该信号不能被捕获或忽略,因此您的程序将接收它并运行默认处理程序。这并没有像您的问题所暗示的那样终止该过程。这只会暂停它,您可以使用 fg on most modern shells 将它带回前台。 .

看来你运气不好。但是,您可以在 shell 级别重新绑定(bind)键盘。这在您的程序之外,您的最终用户无法控制它。 (参见 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 应用程序?

关于linux - 什么是可以在 Tcl 中捕获的 linux 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com