Actually, I quite like Bob's answer.
The signals I use are:
-1(-HUP) - restart a process-2(-INT) - terminate a process-9(-KILL) - let the kernel kick the process out-11(-SEGV) - have the program crash brutally-15(-TERM) - the default, ask the program kindly to terminate.
Kill without signal will send -15 (-TERM).
All the above signal names can be specified the SIG prefix (e.g. -SIGKILL), this, however, is optional.
Note, kill -11 will force the program to exit with a segmentation fault, I use it sometimes, when kill -9 won't terminate a process. (You might lose data if you issue kill -9 or kill -11 on a process, so beware!)
You use ps -ef | grep <program> to inspect the process. To get rid of a process (which has parent PID 1), you have to kill -HUP 1 or kill -1 1 (both as root). Note that PID 1 is you init systemyour init system.
So, to terminate a process, issue kill <pid> (the exact same as kill -15 <pid>), if that fails I try these others (you could lose data!), kill -2 <pid> (akin to doing Ctrl+c), if that fails kill -9 <pid>, if that fails kill -11 <pid>, if that fails the process is most likely a zombie process, ensure that is the case using ps -ef | grep <program_name> or ps -ef | grep <pid>, it should mention "defunct" after the process. This is when you issue kill -1 1.
Some programs, such as Java JVM's, can be configured to dump threads/heap (for troubleshooting) when they receive a signal, in these cases I use kill as well ...