在Windows上使用Ruby发送SIGINT

为了对PPCG.SE的挑战,我想运行程序(提交)有严格的时间限制。 为了不使I / O浪费宝贵的时间,我想运行下面的scheme:

  • 提交在无限循环中进行计算(只要他们得到)并注册信号处理程序。
  • 10分钟后, SIGINT被发送,他们有一秒产生任何必要的输出。
  • 发送SIGKILL来终止提交。

然而,提交应该可以select不注册信号处理程序,只是在自己的时间产生输出。

我将在Windows 8上运行提交,并希望使用Ruby进行编排。 但是,我遇到了一些麻烦。 我以为我能做到这一点:

 solver = IO.popen(solver_command, 'r+') sleep(10*60) Process.kill('INT', solver.pid) sleep(1) Process.kill('KILL', solver.pid) puts solver.read solver.close 

但是,当我发送SIGINT ,不仅提交过程,而且控制Ruby进程也立即中止! 更糟糕的是,如果我在PowerShell中执行此操作,PowerShell也会closures。

一个简单的Ruby“提交”来重现这一点:

 puts "My result" $stdout.flush next while true 

我在这里做错了什么? 我觉得我很可能误解了一些关于stream程和信号的东西,尤其是Ruby,但是我肯定错过了一些东西。