2016-12-02 19 views
1

我收到SIGTERM(不SIGINT)事件后,下面的堆栈跟踪的朱莉娅 - 0.4.7脚本:朱莉娅0.4.7:如何捕捉SIGTERM

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) 

所以,我怎么捉呢?看起来像是在我的朱莉娅二进制文件中被破坏了,不是吗?有没有类似的方式来像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。

回答

0

简答:不能,请参阅here。你参考的东西,jl_exit_on_sigint是一个C函数,写在julia/src/signal-handling.c。目前,他们还没有为SIGTERM编写处理程序,所以添加自己的处理程序意味着要改变Julia的基础,并且他们还没有公开处理信号的任何API。这很大程度上是因为没有一种方法可以在没有大的性能影响的情况下在线程间进行信号处理。