You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中如何在脚本关闭或按下Ctrl+C时执行指定函数?

Ruby中捕获脚本退出/ Ctrl+C执行特定操作的实现方法

在Ruby里,你可以通过信号捕获和退出钩子实现用户关闭脚本或按下Ctrl+C时执行特定操作,具体方案如下:

1. 捕获Ctrl+C(SIGINT信号)

用户在终端按下Ctrl+C会触发SIGINT中断信号,用Ruby的trap方法可以捕获这个信号并执行自定义逻辑:

def epic_function
  puts "User closed down the script"
end

# 捕获Ctrl+C触发的SIGINT信号
trap('INT') do
  epic_function
  exit # 执行完操作后主动退出,避免脚本继续运行
end

# 示例主脚本逻辑
loop do
  puts "脚本运行中...按Ctrl+C退出"
  sleep 1
end

2. 覆盖所有非强制退出场景

如果要处理正常退出(脚本执行完毕、主动调用exit)和非强制终止信号(除SIGKILL外,该信号无法捕获),可以结合at_exit钩子:

def epic_function
  puts "User closed down the script"
end

# 捕获Ctrl+C
trap('INT') do
  epic_function
  exit 1 # 用非0状态码标记异常退出
end

# 脚本退出时触发的全局钩子
at_exit do
  # 避免Ctrl+C时重复执行epic_function
  unless $!.is_a?(Interrupt)
    epic_function
  end
end

# 示例主脚本逻辑
puts "脚本启动"
sleep 5
puts "脚本正常执行完毕"

关键说明

  • trap('INT'):专门响应Ctrl+C的中断操作,确保用户主动终止时立即触发自定义逻辑。
  • at_exit:无论脚本是正常结束还是被其他可捕获信号终止,都会执行这个钩子。加入$!.is_a?(Interrupt)判断是为了避免Ctrl+C场景下,自定义方法被trap和at_exit重复执行。
  • 注意:SIGKILL(即kill -9命令)属于强制终止信号,无法被捕获,这种情况下自定义操作不会执行。

内容的提问来源于stack exchange,提问作者Erik77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:01:05