In practice, in-house testing is not guaranteed to detect all software errors. A plan for extensive testing is often constrained by resources like cost and time. So, the need for continuous monitoring software programs in production runs is always strong. Software monitoring, however, suffers from the performance overhead of the probing techniques. Unless the overhead for probing is tolerable, the code inserted for probing is typically cleaned from the released programs. In production runs, programmers can only rely on observable effects produced by the programs to examine problems. In this paper, a prototype tool called SoftMon is proposed to monitor a computer program with minimum overhead. SoftMon uses a helper thread to monitor programs on a separate CPU without inserting code in the middle of programs. The body of the helper thread is programmable in a language called MCML. By compiling the MCML script, a helper thread is instrumented into a program automatically and transparently.