2012-09-27 33 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)