kill doesn't kill anything. It sends signals to the target process. SIGKILL is just a signal. Now the standard action for SIGKILL is the only action, in fact, since SIGKILL cannot be processed or ignored by the process, it is to get out of this true.
The "<defunct>" process is a child that was not received, which means that the parent did not call wait() to obtain the exit status of the child. Until the parent calls wait() , the replacement process (or "zombies") will hang.
source share