我正在嘗試使用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
派生進程的工作。
嘗試使用exec而不是系統來啓動這些進程。你正在向紅寶石進程發送一個殺手,而不是直接adb。我不熟悉adb是如何運行的,但是如果它自己分配或玩弄會話,它會逃避那個殺手信號。 – Catnapper
感謝Catnapper,但至少邏輯似乎是正確的嗎?使用它似乎是正確的? – xbeta
你的方法是正確的,但聽起來你需要找到adb的子進程的PID。亞行是否有寫pidfile的選項? – Catnapper