|Perl: the Markov chain saw|
In general, you can't, as that will mean solving the halting problem.
You can't solve this problem in general, but not for the reasons you state.
The halting problem doesn't apply to finite state machines. Any computer that exists today is a finite state machine: it can only store a finite number of states, not an infinite number. Even quantum computers only probabilistically distinguish a finite number of probabilities, though they do enable massive parallelism.
You can, in theory, determine whether any two finite state machines do the same thing.
However, you still can't always do this in practice, because you may not have enough states in your machine: memory is costly, and a given computation might require more states than, say, the galaxy has particles. "Finite" can still mean "mind-bogglingly huge", at times.
Sorry, but one of the things that annoys me is when people reason about modern computers as if they were Turing machines. It's sometimes very useful to think of them that way, but they're simply not the same.
Unless you're an immortal with an infinite lifespan, with infinite resources to construct an infinitely large computer, you just can't build a Turing machine. And really, if you're an immortal, don't you have something better to do with your infinite lifespan than to site around waiting literally forever for your Turing machine to halt? I know I'd be out smiting people, or creating life, or something fun instead. :-)