gpt4 book ai didi

ruby - 区分命令行 Ruby 脚本信号的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:44 24 4
gpt4 key购买 nike

我有一个命令行 Ruby 脚本,我需要在其中区分不同的 SignalException秒。具体来说,我想捕获并忽略 control+c (SIGINT) 并在收到 control+\(SIGQUIT) 时退出脚本。

我对 Ruby 还比较陌生,想知道实现我的目标的最佳(或规范)方法。我还想知道是否有可能遇到操作系统差异(我目前在 OS X 上运行,但我的解决方案是否适用于 Windows、Linux 等?)

我能够通过两种不同的方式获得可能信号的列表:

  1. 来自 bash:stty -a(这很好,因为它显示控制键组合)
  2. 通过 IRB:Signal.list

以下是我如何使用这些东西:

#!/usr/bin/env ruby

while true

begin

puts "Spinning my wheels..."
loop {}

rescue Interrupt => e

puts "\nCaught ^C - ignoring"

rescue SignalException => e

puts "\nCaught #{e.inspect}"

if e.message == "SIGQUIT"
puts "Shutting down..."
exit
end

end

end

最佳答案

捕获信号的正确方法是使用 Signal.trap :

Signal.trap('QUIT') do
puts "Shutting down..."
exit
end

Signal.trap('INT', 'IGNORE')

链接的文档对操作系统差异有一些评论,特别是:

The list of available signal names and their interpretation is system dependent. Signal delivery semantics may also vary between systems; in particular signal delivery may not always be reliable.

关于ruby - 区分命令行 Ruby 脚本信号的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31341240/

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