【发布时间】:2011-08-20 01:21:47
【问题描述】:
我正在泄漏 jRuby 进程,但我不知道如何阻止它。我需要 groovy 脚本在启动 jRuby 后继续运行,并且我需要 jRuby 在主脚本终止时终止。
test.groovy, loop.rb
loop.rb
while( true )
puts 'Hello from jRuby'
sleep 1
end
test.groovy
def command = "jruby ./loop.rb"
Thread.start {
Process process
try {
process = command.execute()
}
catch (IOException e) {
e.printStackTrace()
return
}
Runtime.runtime.addShutdownHook {
println "Attempting to stop process"
process.destroy()
}
process.consumeProcessOutput(System.out, System.err)
process.waitFor()
}
while( true ){ println 'Hello from groovy'; Thread.sleep(1000) }
执行
groovy test.groovy
如何确保我使用 jRuby 创建的外部 javaw 进程被终止?即使向正在运行的应用程序发送Cntrl+C 会杀死正在运行的 groovy 进程,但 jRuby 进程仍然存在。帮忙?
【问题讨论】:
-
它实际上并没有杀死进程。
-
如果是 windows,我不得不求助于调用 taskkill,就像接受的答案一样(jruby 的 Process.kill 也不起作用)
-
更新:jruby 的 Process.kill 现在可以在 windows 中工作了 :)
标签: ruby groovy process jvm jruby