gpt4 book ai didi

java - 在 Groovy 脚本中监听 CTRL+C

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:32 26 4
gpt4 key购买 nike

从命令行运行 groovy 脚本时是否可以收听 CTRL+C?

我有一个创建一些文件的脚本。如果中断,我想从磁盘中删除它们,然后终止。

可能吗?

更新 1:来自@tim_yates 的回答:

def withInteruptionListener = { Closure cloj, Closure onInterrupt ->

def thread = { onInterrupt?.call() } as Thread

Runtime.runtime.addShutdownHook (thread)
cloj();
Runtime.runtime.removeShutdownHook (thread)

}

withInteruptionListener ({

println "Do this"
sleep(3000)

throw new java.lang.RuntimeException("Just to see that this is also taken care of")
}, {
println "Interupted! Clean up!"
})

最佳答案

以下应该有效:

CLEANUP_REQUIRED = true
Runtime.runtime.addShutdownHook {
println "Shutting down..."
if( CLEANUP_REQUIRED ) {
println "Cleaning up..."
}
}
(1..10).each {
sleep( 1000 )
}
CLEANUP_REQUIRED = false

如您所见,(正如@DaveNewton 指出的那样),"Shutting down..." 将在用户按下 CTRL-C 或进程正常完成时打印,因此您d 需要一些检测是否需要清理的方法

更新

出于好奇,以下是使用不受支持的 sun.misc 类的方法:

import sun.misc.Signal
import sun.misc.SignalHandler

def oldHandler
oldHandler = Signal.handle( new Signal("INT"), [ handle:{ sig ->
println "Caught SIGINT"
if( oldHandler ) oldHandler.handle( sig )
} ] as SignalHandler );

(1..10).each {
sleep( 1000 )
}

但很明显,这些类(class)不能被推荐,因为它们可能会消失/改变/移动

关于java - 在 Groovy 脚本中监听 CTRL+C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com