1

このコードをRubyShoesで動作させようとしましたが、「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

スレッドの強制終了 (どの言語でも) は、かなり制限された操作です。あなたの場合、スレッドはブロック呼び出し (サブシェルへの呼び出し) でスタックしているため、強制終了できません。

あなたがする必要があるのは、最初にサブプロセスを殺すことです。バックティック演算子から PID を取得する方法がわからないので、代わりに Process.spawn (Ruby 1.9) を使用し、サブプロセスの PID を取得して、Process.kill を呼び出す必要があります。

于 2012-10-02T05:02:42.833 に答える
0

主な問題は、クラス変数を使用して定義する必要があることだと思います

@airodump=Thread.new do
  ...
 end

そして、それを殺すよりも:

 Thread.kill(@airodump)
于 2012-10-02T00:03:02.320 に答える