At least two kind of processes (regarding their status) cannot be killed: "defunct" and "in uninterruptible sleep". Defunct processes (also known as zombies) are childs whose parents do not receive notification about their fate: if the child dies and the parent does not take care of it, the only way to kill a zombie (without rebooting) is to quit or kill the parent (as cconstantine said).
A process in uninterruptable sleep is often a process waiting from a signal from a piece of hardware: if the hardware fails to send the signal, the process sleeps forever, unless you can manually restore the problem. For example, it can happen with floppy drivers and ejecting/reinserting the floppy disk could solve the situation.
You can check the status and the parenthood of the processes with the following ps command
as an example, at this very moment I have a zombie generated from firefox and the related output from the above command is
Code:
13498 colucix S ? 00:00:00 /bin/sh /usr/lib/firefox-1.5.0.10/firefox -UILocale en-US
13520 colucix S ? 00:00:00 /bin/sh /usr/lib/firefox-1.5.0.10/run-mozilla.sh /usr/lib/firefox-1.5.0.10/firefox-bin -UILocale en-US
13525 colucix S ? 00:01:31 /usr/lib/firefox-1.5.0.10/firefox-bin -UILocale en-US
13532 colucix Z ? 00:00:00 [netstat] <defunct>
The third column is the status: Z means zombie, D means uninterruptible sleep. Hope this will help.