0

我正在编写一个 ruby​​ 脚本,在其中我想在子进程中执行 android logcat -v time 命令,并在一段时间后终止该进程(当父进程完成 xyz 时)。

例如我有: childpid = Process.fork { adb -s <device-serial> logcat -c adb -s <device-serial> logcat -v time>/path-to-file/forkLog.log }

sleep(30)
    #parent do thing else here ...
Process.kill("SIGHUP", childpid)  #kill the child process

根据我读过的 adb logcat 代码是在另一个子进程中执行的,所以当我尝试执行 Process.kill 时,childpid 会停止,但它的子进程不会。

如何从父进程中杀死 logcat -v time>forklog.log 进程?

4

1 回答 1

0

通常,当您使用 fork 调用 bash 脚本时,您需要使用Kernel::exec()而不是 Kernel::system() 或 Kernel::`

Process.fork{exec('adb -s <device-serial> logcat -c && adb -s  <device-serial> logcat -v time>/path-to-file/forkLog.log'}

不同之处在于 exec 将用 shell 脚本替换Ruby 进程,而另外两个将创建一个子进程。

于 2013-02-01T01:37:07.087 回答