在 Windows 关闭期间正常关闭 Ruby 进程

在 Windows 关闭期间正常关闭 Ruby 进程

我有一台 Windows 2012 r2 机器,其中有一个计划的 ruby​​ 进程,每分钟运行一次 - 有时仅在几秒钟后退出,其他时候则运行 5 分钟左右。

我想要实现的是能够关闭机器,等待进程退出(如果正在运行)实际关闭。关闭需要从外部启动(例如通过 AWS API 调用)。

有没有办法做到这一点?

我尝试了几种不同的方法,但都无济于事:

  • Signal.trap(...)在 ruby​​ 代码中 - 似乎没有向进程发送任何信号
  • A关机脚本它本身就调用了Wait-Process- 在这种情况下,我思考在关闭脚本执行之前,ruby 进程被终止。

我还看到,windows 程序有一种方法可以挂载到某些 windows 事件(例如:)CTRL_SHUTDOWN_EVENT并返回值来表示是否继续关闭,但我有点不明白如何在 ruby​​ 进程中挂载它。也许可以将其包装到某些 windows 程序中以允许这样做?

答案1

您使用的 Windows 机制不对,无法实现您想要实现的目标。我会将 ruby​​ 进程重写为 Windows 服务,这样当服务即将关闭时,Windows 就会向服务发出信号。

或者,您可以安排一个额外的任务“关机时”,停止正在运行的 Ruby 任务并执行一些干净的退出,就像您在 Ruby 任务中编写的那样。

相关内容