Random thoughts:
* Go multithreaded. Have 10 interpreter threads and a monitor thread. If a particular thread is taking too long at a task, the monitor will kill the thread and start a new one.
* Fork the interpreter children at the beginning and trade data with them via pipes. In your mush's MainLoop, have it check some kind of magic data for the End-of-processing message. If things take too long, send SIGHUP (or something) to the child and have the child kill things.
Implementation details are left up to the reader. These are just ideas :)