Killing Threads в Ruby 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 ответа

Решение

Уничтожение потоков (на любом языке) - довольно ограниченная операция. В вашем случае поток застрял в блокирующем вызове - вызове подоболочки - и поэтому не может быть прерван.

Что вам нужно сделать, это сначала убить подпроцесс. Я не знаю, как получить PID из оператора backtick, поэтому вам лучше использовать Process.spawn (на ruby ​​1.9), получить PID подпроцесса и вызвать Process.kill

Я думаю, что основная проблема заключается в том, что вы должны использовать переменные класса, поэтому определить

@airodump=Thread.new do
  ...
 end

И чем убить его

 Thread.kill(@airodump)
Другие вопросы по тегам