I don't like this since it will consume lots of CPU on both the host and the device.

You might consider just doing an adb shell with no command. Then it will drop into a shell, and the adb command will return when the adb session is dropped.