How often does plain 'kill <pid>' not work, but some other signal other than SIGKILL works?
Usually the process is either working correctly and terminates when asked, or else not working correctly and needs to be KILLed.
It is possible to install a handler for most signals, and that handler can be configured to ignore the signal.
Signal 9 cannot be ignored.
Lots of commandline tools will hold on to dear life except for the sigkill. I often have this with running background tasks which get one of their threads in an infinite loop or wait state.