To reproduce: look at top(1) when ./vm/Self is running in another terminal. It always hovers at 5-10% CPU usage on my machine.
Here is what I think happens: The SIGALRM signal handler that's installed by what I suspect is the scheduler (profiler?) seems to run at a 100 Hz frequency. When you start a shell, all those signals cause the fread() that is called by InteractiveScanner::read_next_char() to keep returning from and re-entering the read() system call.
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn() = 3
read(0, 0x9d6627f, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn() = 3
read(0, 0x9d6627f, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn() = 3
read(0, 0x9d6627f, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn() = 3
read(0, 0x9d6627f, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn() = 3
read(0, 0x9d6627f, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
3 507 sigreturn:entry
libsystem_c.dylib`OSAtomicAnd32
0xffffffff
libsystem_c.dylib`_sread+0x23
libsystem_c.dylib`__srefill1+0x22
libsystem_c.dylib`__fread+0xe1
libsystem_c.dylib`fread+0x42
Self`InteractiveScanner::read_next_char()+0x48
Self`Scanner::get_char()+0x45
Self`Scanner::is_done()+0x1a
Self`run_the_VM()+0x266
Self`ReturnOffTopOfProcess
3 931 read_nocancel:entry
libsystem_kernel.dylib`__read_nocancel+0xa
libsystem_c.dylib`_sread+0x23
libsystem_c.dylib`__srefill1+0x22
libsystem_c.dylib`__fread+0xe1
libsystem_c.dylib`fread+0x42
Self`InteractiveScanner::read_next_char()+0x48
Self`Scanner::get_char()+0x45
Self`Scanner::is_done()+0x1a
Self`run_the_VM()+0x266
Self`ReturnOffTopOfProcess