What most often "defunct" means is a 'zombie' , so you have to 'kill'em all' you can either "pkill -9 firefox" - guaranteed that all processes with firefox in their names will die, though it's dangerous, or, you can 'kill -9' which is not the most elegant way, but it works. The regular kill is the default, nice way, whereas -9 flag cannot be ignored.
only process can be killed.
zombie is not at all a process.
It just represents its existence in the past occupying a slot in the kernel process table and as such it is not a process
I don't understand when you use the term - "most often"
Does that mean a non-defunct process can be zombie ?
I haven't heard of this before or came across such.
Would you mind giving some explanation about this ?
Um, yeah. I've seen it in commercial, proprietary application. Developers have chosen to put <defunct> tag in the process' name not when the process becomes zombie, as this is the only parent, but when it was trying to acquire certain number of open files, which may be impossible at this time, due to ulimit limitation for example. On the same application, <defunct> has been chosen as generic error message, just as in perl's warn : "Warning: Something's wrong" when $@ is empty.