Defunct processes are commonly known as “zombies”. You can’t “kill” a zombie as it is already dead. Zombies are created when a process (typically a child process) terminates either abnormally or normally and it’s spawning process (typically a parent process) does not “wait” for it (or has yet to “wait” for it) to return an exit status.
It should be noted that zombies DO NOT consume any system resources (except a process slot in the process table). They are there to stay until the server is rebooted.
Zombies commonly occur on programs that were (incompletely) ported from old BSD systems to modern SysV systems, because the semantics of signals and/or waiting is different between these two OS families.

IBM Link: Why Can’t I Kill My Process