2013-02-01 63 views
1

我正在嘗試使用Ruby編寫腳本來在Android應用上運行monkey測試。我堅持使用1.8 Ruby,不能使用產卵。當另一個Ruby子進程完成時終止Ruby子進程

有關詳細信息,請參閱下面的代碼。由於某些原因,即使monkey過程已完成,logcat過程仍將繼續運行。我已經使用Process.wait()等待monkey進程完成,然後再殺死logcat進程,但它並沒有殺死它。我沒有正確使用fork嗎?

謝謝。

pid_logcat = fork do 
    puts "Enter capturing logcat" 
    system("adb shell logcat | tee logcat.log") 
end 

pid_monkey = fork do 
    puts "Running monkey script" 
    system("adb shell monkey -p TestApp --throttle 200 -v 1000000 | tee Monkeylog.txt") 
end 


Process.wait(pid_monkey) 
Process.kill("KILL", pid_logcat) 

編輯了1

我可以證實,adb不會產生另一個過程,是紅寶石的控制之外,我應該怎麼辦呢? Process.kill('HUP', -Process.getpgid(pid_logcat))不會工作,因爲這將殺死父進程太(分叉此紅寶石過程)

組織編寫 exec()也似乎沒有對pid_logcat派生進程的工作。

+0

嘗試使用exec而不是系統來啓動這些進程。你正在向紅寶石進程發送一個殺手,而不是直接adb。我不熟悉adb是如何運行的,但是如果它自己分配或玩弄會話,它會逃避那個殺手信號。 – Catnapper

+0

感謝Catnapper,但至少邏輯似乎是正確的嗎?使用它似乎是正確的? – xbeta

+0

你的方法是正確的,但聽起來你需要找到adb的子進程的PID。亞行是否有寫pidfile的選項? – Catnapper

回答

1

只需在您的代碼後添加Process.wait(pid_logcat)即可。

+1

它只是工作。等待不等待logcat完成,但它只是在殺死後「加入」它。 –

相關問題