![在 Windows 关闭期间正常关闭 Ruby 进程](https://linux22.com/image/673854/%E5%9C%A8%20Windows%20%E5%85%B3%E9%97%AD%E6%9C%9F%E9%97%B4%E6%AD%A3%E5%B8%B8%E5%85%B3%E9%97%AD%20Ruby%20%E8%BF%9B%E7%A8%8B.png)
我有一台 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 任务中编写的那样。