2012-09-27 35 views
1

我试着让这段代码在Ruby Shoes中有效,但我无法成功地杀死名为“airodump”的线程。每次我点击“停止扫描”按钮,它不会做任何事情:■在Ruby Shoes中杀死线程似乎不起作用?

感谢

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 

回答

0

主题杀伤(在任何语言)是一种相当有限Ø peration。在你的情况下,线程停留在阻塞调用 - 对子shell的调用 - 因此不能被终止。

你需要做的是先杀死子进程。我不知道如何从反向操作符中得到PID,因此您需要使用Process.spawn(在ruby 1.9上),gey子进程的PID,并调用Process.kill

0

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

@airodump=Thread.new do 
    ... 
end 

而不是通过杀死它:

Thread.kill(@airodump)