我有一台 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 任务中编写的那样。