Firstly, running ps -ef | grep [r]un_ct (or any other regex that does not match itself) instead of ps -ef | grep run_ct | grep -v grep will save you a process.
in reply to Strange behaviour - Net::Telnet
Secondly, maybe the waitfor is eating the first ps echo. castaway points out in the CB that cmd eats the echo, but print does not, so you should expect the echo, not be surprised by it.
Finally, if you use a Perl regex in your script to remove the ps command, then it will also remove the ps echo.