Usually, a responding client should receive a sigterm and off itself, thereby terminating all its forked child processes. If, on the other hand, the client is not responding, a normal termination signal will probably evoke no response.
So you then proceed to send a SIGKILL, which tells the system itself to Make That Process Stop, Now - which it can do most of the times, except when the process is in a state of ininterruptible sleep, like waiting for some I/O input or similar.
In that case, even the SIGKILL will end up doing nothing to the process; the child process will probably in a similar state of retardation.
There is a border case where the parent process might terminate just nicely, but the child process is not killable. Then you will end up with a zombie process that cannot be cleaned up since its father is gone, but it is not responding to anything. The only way to get rid of those is a reboot; in most cases, though, they are quite harmless, as the only thing they do is take up a PID while whatever socket they tried to use has withered away already.
pkill -9
is more powerful thanpkill
, for whatever reason.-9
causes it to send the KILL signal, which terminates the process immediately. You want to avoid doing this if possible. Only use -9 if a regular kill didn't work in the first few seconds.