在Windows上使用Ruby发送SIGINT

时间:2014-09-08 21:40:50

标签: ruby windows process signals

为了对PPCG.SE提出挑战,我希望运行具有严格时间限制的程序(提交)。为了让这些提交不浪费他们宝贵的I / O时间,我想运行以下方案:

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

但是,提交应该可以选择不注册信号处理程序,只是在他们自己的时间产生输出。

我将在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也会关闭。

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

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

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

0 个答案:

没有答案