Android 在另一个Ruby子进程完成时杀死一个Ruby子进程

Android 在另一个Ruby子进程完成时杀死一个Ruby子进程,android,ruby,process,stress-testing,monkey,Android,Ruby,Process,Stress Testing,Monkey,我正在尝试使用Ruby编写一个脚本,在Android应用程序上运行monkey测试。我只能使用1.8Ruby,不能使用spawn 有关详细信息,请参见下面的代码。由于某些原因,logcat进程将继续运行,即使monkey进程已完成。在杀死logcat进程之前,我使用了Process.wait()等待monkey进程完成,但它没有杀死它。我是否未正确使用分叉 谢谢 pid_logcat = fork do puts "Enter capturing logcat" system("

我正在尝试使用Ruby编写一个脚本,在Android应用程序上运行monkey测试。我只能使用1.8Ruby,不能使用spawn

有关详细信息,请参见下面的代码。由于某些原因,
logcat
进程将继续运行,即使
monkey
进程已完成。在杀死
logcat
进程之前,我使用了
Process.wait()
等待
monkey
进程完成,但它没有杀死它。我是否未正确使用
分叉

谢谢

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
确实产生了另一个ruby无法控制的进程,我现在该怎么办
Process.kill('HUP',-Process.getpgid(pid_logcat))
将不起作用,因为这也将杀死父进程(产生此结果的ruby进程)

编辑2
exec()
似乎对
pid\u logcat
分叉进程也不起作用。

只需添加
进程。在代码之后等待(pid\u logcat)

尝试使用exec而不是系统来启动这些进程。您正在向ruby进程发送kill,而不是直接向adb发送kill。我不熟悉亚洲开发银行是如何运作的,但如果它自己分岔或玩会话,它会避开杀戮信号。谢谢Catnapper,但至少逻辑似乎是正确的,对吗?使用它似乎是正确的,对吗?您的方法是正确的,但听起来您需要找到adb子进程的pid。adb是否有写入pid文件的选项?adb实例的子进程-是其父pid 1,还是其父adb进程的pid?如果是父pid,则可以确定哪个adb子级属于每个adb父级,并向它们发送终止。如果父pid为1,则意味着它已被守护,并且没有简单的方法确定哪个adb是父pid。如果是这样的话,你可以考虑用猎枪的方法杀死所有的ADB进程。Wait并不等待logcat完成,但它只是在杀死后“加入”它。