gpt4 book ai didi

sigint - Julia,处理键盘中断

转载 作者:行者123 更新时间:2023-12-04 17:49:33 24 4
gpt4 key购买 nike

标题说明了一切。我该如何处理或捕捉 SIGINT在 Julia ?从文档中我假设我只是想 catch InterruptException使用 try/catch像下面这样块

try
while true
println("go go go")
end
catch ex
println("caught something")
if isa(ex, InterruptException)
println("it was an interrupt")
end
end

但是当我用 ^C 杀死程序时,我从不进入 catch 块。 .

编辑:上面的代码在 julia REPL 中按预期工作,只是不在脚本中。

最佳答案

我看到与 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_sigint0对于 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

这似乎有点黑客攻击。有没有更优雅的方式来选择环境的中断行为?默认值似乎很合理,但也许应该有一个命令行选项来覆盖它。

关于sigint - Julia,处理键盘中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831290/

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