【问题标题】:Julia 0.4.7: How to catch SIGTERMJulia 0.4.7:如何捕捉 SIGTERM
【发布时间】:2016-12-16 12:05:01
【问题描述】:

在 julia-0.4.7 脚本中的 SIGTERM(不是 SIGINT)事件之后,我得到以下堆栈跟踪:

signal (15): Terminate
write at /lib64/libpthread.so.0 (unknown line)
unknown function (ip: 0x2ade16a02893)
uv_write2 at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
jl_uv_write at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
uv_write at ./stream.jl:951
buffer_or_write at ./stream.jl:972
write at ./stream.jl:1011
print at ./char.jl:47
unknown function (ip: 0x2ade1e06d0a2)
jl_apply_generic at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
print at strings/io.jl:18
jl_apply_generic at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
jl_f_apply at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
println at strings/io.jl:25
jl_apply_generic at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
anonymous at /path/to/home/test.jl:4
unknown function (ip: 0x2ade169c5b13)
unknown function (ip: 0x2ade169c672c)
jl_load at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
include at ./boot.jl:261
jl_apply_generic at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
include_from_node1 at ./loading.jl:333
jl_apply_generic at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
process_options at ./client.jl:284
_start at ./client.jl:378
unknown function (ip: 0x2ade1e05ae79)
jl_apply_generic at /path/to/home/julia/bin/../lib/julia/libjulia.so (unknown line)
unknown function (ip: 0x401c87)
unknown function (ip: 0x40186f)
__libc_start_main at /lib64/libc.so.6 (unknown line)
unknown function (ip: 0x4018b5)

那么,我该如何捕捉它?看起来我的 Julia 二进制文件有问题,不是吗?有没有像 SIGINT 一样捕捉 SIGTERM 的类似方法?即:

ccall(:jl_exit_on_sigint, Void, (Cint,), 0)
try
    ...
catch ex
    println("caught something")
    if isa(ex, InterruptException)
        println("it was an interrupt")
    end
end

我使用的是 Cent-OS 6.5。

【问题讨论】:

    标签: julia sigterm


    【解决方案1】:

    简短回答:您不能,请参阅here。您引用的东西jl_exit_on_sigint 是用julia/src/signal-handling.c 编写的C 函数。目前,他们还没有为SIGTERM 编写处理程序,因此添加您自己的处理程序将意味着更改 Julia 的基础,并且他们通常没有公开任何处理信号的 API。这主要是因为没有一种方法可以在不影响性能的情况下以一致的方式跨线程进行信号处理。

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2022-07-04
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多