2013-02-01 3 views
1

Ruby를 사용하여 Android app에서 원숭이 테스트를 실행하는 스크립트를 작성하려고합니다. 나는 1.8 루비와 붙어있어 스폰을 사용할 수 없다.다른 Ruby 하위 프로세스가 완료되면 Ruby 하위 프로세스를 종료하십시오.

자세한 내용은 아래 코드를 참조하십시오. 어떤 이유로 인해 monkey 프로세스가 완료된 후에도 logcat 프로세스가 계속 실행됩니다. monkey 프로세스가 완료 될 때까지 대기하기 위해 Process.wait()을 사용했으나 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 루비의 통제 밖에서 또 다른 프로세스를 생성 않는 것을 확인할 수 있습니다 편집? 그 역시 (이 분기 루비 과정)도 pid_logcat 포크 과정에서 작동하지 않는 것 exec()이 편집

를 부모 프로세스를 종료하기 때문에 Process.kill('HUP', -Process.getpgid(pid_logcat))이 작동하지 않습니다.

+0

시스템 대신 exec를 사용하여 프로세스를 시작하십시오. 당신은 루비 프로세스에 kill을 보내고 직접 adb하지 않습니다. 나는 adb의 실행 방법에 익숙하지 않지만, 세션을 통해 포크를하거나 연주를한다면, 그 신호를 피할 것이다. – Catnapper

+0

Catnapper에게 감사의 말을 전합니다.하지만 적어도 로직은 정확하다고 보십니까? 그리고 그것을 올바르게 사용하는 것이 올바른 것 같습니다. – xbeta

+0

접근 방법은 정확하지만 adb의 하위 프로세스의 PID를 찾아야하는 것처럼 들립니다. adb는 pidfile을 쓸 수있는 옵션이 있습니까? – Catnapper

답변

1

코드 뒤에 Process.wait(pid_logcat)을 추가하기 만하면됩니다.

+1

그냥 작동합니다. Wait은 logcat이 끝날 때까지 기다리지 않고 kill 후에 그냥 'join'합니다. –

관련 문제