我看到与 alto 相同的行为,即SIGINT
当我的代码作为脚本运行时会终止整个进程,但在 REPL 中运行时会被捕获为错误。我的版本是最新的,看起来与 tholy 的版本非常相似:
julia> versioninfo()
Julia Version 0.3.7
Commit cb9bcae* (2015-03-23 21:36 UTC)
Platform Info:
System: Linux (x86_64-linux-gnu)
CPU: Intel(R) Core(TM) i7-3610QM CPU @ 2.30GHz
WORD_SIZE: 64
BLAS: libopenblas (DYNAMIC_ARCH NO_AFFINITY Sandybridge)
LAPACK: libopenblas
LIBM: libopenlibm
LLVM: libLLVM-3.3
挖掘源代码,我发现Julia's
中断行为是由一个jl_exit_on_sigint
选项决定的,该选项可以通过ccall
. jl_exit_on_sigint
是0
用于 REPL,但它看起来好像在从命令行运行程序文件时init.c
将其设置为。1
Julia
ccall
无论调用环境如何,添加适当的使 alto 的代码都可以工作:
ccall(:jl_exit_on_sigint, Void, (Cint,), 0)
try
while true
println("go go go")
end
catch ex
println("caught something")
if isa(ex, InterruptException)
println("it was an interrupt")
end
end
这似乎有点骇人听闻。有没有更优雅的方式来选择环境的中断行为?默认值似乎很合理,但也许应该有一个命令行选项来覆盖它。