我正在尝试使用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