1

我试图让这段代码在 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
4

2 回答 2

0

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

@airodump=Thread.new do
  ...
 end

而不是通过以下方式杀死它:

 Thread.kill(@airodump)
于 2012-10-02T00:03:02.320 回答
0

线程终止(任何语言)是一个非常有限的操作。在您的情况下,线程卡在阻塞调用中 - 对子外壳的调用 - 因此无法被杀死。

您需要做的是首先杀死子进程。我不知道如何从反引号运算符中获取 PID,因此您需要使用 Process.spawn(在 ruby​​ 1.9 上),获取子进程的 PID,然后调用 Process.kill

于 2012-10-02T05:02:42.833 回答