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)