gpt4 book ai didi

ruby - 我可以在 ruby​​ 中捕获 control-q 和 control-s 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:37 25 4
gpt4 key购买 nike

对于一些信号,比如 SIGINT,我可以很容易地设置一个陷阱来处理信号,并在我认为合适的时候继续执行。我想将 ^q 和 ^s 的典型行为添加到我正在摆弄的 ruby​​ 命令行应用程序中。有没有一种方法可以做到这一点 - 特别是一种可移植的方法,以便我可以在 Windows、iOS、Linux 和 Solaris 中使用它?

编辑:

事实证明,信号从未传递给进程。事实上,在进程及其父进程(一个 bash 实例)上运行 strace 表明进程和父进程都没有得到任何关于正在发生的事情的指示。他们只是被停职了。

我可能会尝试让 SIGALARM 处理程序每​​秒触发一次,检查自上次警报以来是否已经超过一秒,并在断定进程已暂停时进行适当的调用。在负载很重的系统上会出现误报。

最佳答案

在 irb 中输入 Signal.list .它将列出您应该能够捕获的所有信号。

在 ruby​​ 中捕获信号:

Signal.trap("STOP") do
# handle the signal
end

在终端中输入 $ stty -a .它应该列出信号及其关联的组合键(如果有的话)。

我相信 ^s 通常是 stop ^q 是 start .

虽然根据this answer ,这些组合键实际上并没有向正在运行的进程发送信号,而是向终端驱动程序发送信号。在这种情况下,kill -STOP <process>可以将该信号发送到您的进程。

关于ruby - 我可以在 ruby​​ 中捕获 control-q 和 control-s 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375905/

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