2015-04-21 31 views
3

我想有些線程可能不願死。線程有sigkill嗎?

t = Thread.new { begin 
        puts 'do' 
        sleep 10 
        puts 'done' 
       ensure 
        loop { puts "really don't wanna die" } 
       end 
       } 

^想象一下,如果你嘗試Thread#kill這個討厭的混蛋會發生什麼。

回答

0
t.exit 
t.alive? => false 

如果你使用陷阱,你應該閱讀有關trap("EXIT")

-1

如果你問如何殺死一個進程,你可以做

Process.kill("KILL", pid) 

一旦它變得殺 - 9,內核然後殺死進程本身。用它殺死線程。 此外,您可以捕獲該信號並殺死它優雅

Signal.trap("KILL") { puts "Child died" } 

是否回答你的問題?

+2

「也,你可以捕獲這個信號並優雅地殺死它」 - 你不能。 SIGKILL是那些無法提供的信號之一。 – PSkocik

+0

試一試。第二個片段會給你一個Errno :: EINVAL異常。 – PSkocik

+0

我在問,是否有一種方法可以在不使用整個過程的情況下提供線程。不過,如果沒有一個 - 如果我的孩子們的行爲不當,那麼我認爲他們應該受到SIGKILL。 – PSkocik