Yes, there are plenty of ways to get OS-level info about a thread or process. Reading "/proc" or learning "gdb" are two particularly good choices:
http://www.linuxjournal.com/article/8381
http://www.linux.com/archive/feature/126718
And yes, there are plenty of ways to control the behavior of a thread or process; either within the process, or from other processes on the system (or, of course, even from remote hosts).
But you want to go for the *highest* level of abstraction (e.g. set a shared variable, or create a new class instance). You *don't* want to muck around with low-level constructs like Program Counters or stack frames.
IMHO .. PSM