no thats the meaning of the halting problem. you can't tell in advance if it will terminate.
a) You often can: I know that
10 PRINT "I WILL NEVER LOG OFF"
20 GOTO 10
doesn't terminate, and I know that
10 LET A = 10000000000000000
20 LET A = A - 1
30 IF A > 0 GOTO 20
does, eventually.
b) Running it only tells you
that it terminates
if it terminates
while you're running it; if it doesn't, well maybe it would have if you'd left it running for longer. In fact, for any finite number
n it's theoretically possible to write a program that can determine with certainty whether another program/input combination will terminate within
n steps. That program might not give the right answer for n+1 steps, though, and the program that would give the right answer for n+1 steps might not give the right answer for n+2 steps, etc.
(edit: just realised that's a bit of a red herring: you can write a program that takes
n as a parameter that, for all finite
n, can determine with certainty whether another program/input combination will terminate within
n steps, so it's not like it would have to be a different program for different values of
n. What does this magic program do? Worst case scenario, it emulates the execution of the other program for
n steps, or until termination, then tells you which has happened. Which is morally the same as "running" it, but the halting problem is not, actually, the problem that you "have to run a program to know whether it will terminate", but the problem that even a program that can run another program for a finite number of steps cannot use this method to determine, for all program/input combinations, whether they will
ever terminate)
What isn't possible is to write a program that can determine, for all program/input combinations, whether there exists a number
n which is the number of steps the other program will run for before terminating.