Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 有线程的sigkill吗?_Ruby_Multithreading - Fatal编程技术网

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整个进程。不过,如果没有不合理的设计——如果我的孩子行为不端,我就应该和他们一起被杀。