2013-02-01 62 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完成,但它只是在杀死后“加入”它。 –

相关问题