在Ruby Shoes中杀死线程似乎不起作用?

时间:2012-09-27 07:29:53

标签: ruby multithreading shoes

我尝试让这段代码在Ruby Shoes中运行,但我无法成功杀死名为“airodump”的线程。每次我点击“停止扫描”按钮,它都不会执行任何操作:s

由于

    button "scan networks" do
      airodump = Thread.new do
         `sudo airodump-ng --write tuto wlan0`
       end
       Thread.new do
         button "Stop scanning" do
           Thread.kill(airodump)
         end
       end
    end

2 个答案:

答案 0 :(得分:0)

我认为主要的问题是你应该使用类变量来定义

@airodump=Thread.new do
  ...
 end

而不是杀死它:

 Thread.kill(@airodump)

答案 1 :(得分:0)

线程查杀(使用任何语言)是一项非常有限的操作。在你的情况下,线程陷入阻塞调用 - 对子shell的调用 - 因此无法被杀死。

您需要做的是先杀死子进程。我不知道如何从反引号操作符中获取PID,所以你需要使用Process.spawn(在ruby 1.9上),gey子进程的PID,并调用Process.kill