Ruby 有线程的sigkill吗?
我想有些线程可能不愿意死Ruby 有线程的sigkill吗?,ruby,multithreading,Ruby,Multithreading,我想有些线程可能不愿意死 t = Thread.new { begin puts 'do' sleep 10 puts 'done' ensure loop { puts "really don't wanna die" } end } ^
t = Thread.new { begin
puts 'do'
sleep 10
puts 'done'
ensure
loop { puts "really don't wanna die" }
end
}
^想象一下如果你想杀死这个讨厌的混蛋会发生什么
t.exit
t.alive? => false
如果您使用的是陷阱,那么您应该阅读关于trapEXIT的内容如果您询问如何终止进程,您可以这样做
Process.kill("KILL", pid)
一旦得到kill-9,内核就会杀死进程本身。用它杀死线程。
此外,您还可以捕获此信号并优雅地消除它
Signal.trap("KILL") { puts "Child died" }
这回答了你的问题吗?此外,你可以捕捉这个信号,然后优雅地消除它,但你不能。SIGKILL是一种不可察觉的信号。试试看。第二个代码片段将为您提供一个Errno::EINVAL异常。我想问的是,是否有一种方法可以sigkill线程而不sigkill整个进程。不过,如果没有不合理的设计——如果我的孩子行为不端,我就应该和他们一起被杀。