我尝试让这段代码在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
答案 0 :(得分:0)
我认为主要的问题是你应该使用类变量来定义
@airodump=Thread.new do
...
end
而不是杀死它:
Thread.kill(@airodump)
答案 1 :(得分:0)
线程查杀(使用任何语言)是一项非常有限的操作。在你的情况下,线程陷入阻塞调用 - 对子shell的调用 - 因此无法被杀死。
您需要做的是先杀死子进程。我不知道如何从反引号操作符中获取PID,所以你需要使用Process.spawn(在ruby 1.9上),gey子进程的PID,并调用Process.kill