I don't thing zombie process is much of a headache. A zombie process does not take up any resources. It is just that it has it's entry in the process table.
A Zombie process is not an orphan process, it does have a parent.
kill
, skill
pkill
will not work since the process is already killed, just that it's entry has not been removed.
Zombie process can be killed by sending SIGCHLD
signal to parent.
I think the signal number of SIGCHLD
is 17
or 18
If this also fails, then you might want to kill the parent itself.
From Wikipedia on SIGCHLD signal:
When a child process terminates before
the parent has called wait, the kernel
retains some information about the
process to enable its parent to call
wait later. Because the child is
still consuming system resources but
not executing it is known as a zombie
process.
EDIT 1: The system resources consumed is mostly the process table entry. If anyone knows if it consumes more than that - memory or CPU cycle, then please add an explanation. AFAIK it hardly takes up any significant system resources.
EDIT 2: Quoting from Wikipedia
On Unix and Unix-like computer
operating systems, a zombie process or
defunct process is a process that has
completed execution but still has an
entry in the process table. This entry
is still needed to allow the process
that started the (now zombie) process
to read its exit status.
So the entry is kept so that the parent process can know the exit status because the moment the child exits, the parent is probably not in a state or not ready to read it's exit status.
EDIT 3
Till date I never experienced a zombie process taking 100% of the CPU. Seeing this for the first time.
Try doing a killall utorrent.exe
I can see that there are two instances of utorrent.exe
and one of them is zombie. Probably the second one (child). killall should kill the parent since the child(zombie) cannot be killed.
EDIT 4
Looks like the killall did not work since it was giving TERM signal instead of KILL.
Try out killall --signal=KILL utorrent.exe
If this does not work then try killing the process selectivly.
Get the list of utorrent.exe process PID
ps -e | grep -i utorrent
You should get two process like
xxxx ? aa:bb:cc utorrent.exe defunct
yyyy ? aa:bb:cc utorrent.exe
So the second one is the parent.
Kill it using
kill -9 yyyy
EDIT 5
Please try finding the process's Parent Id by this bash command
cat /proc/{defunctpid}/status | grep -i ppid
in your case is
cat /proc/7298/status | grep -i ppid
If the output comes like
PPid: 1
Then sadly I think you are out of luck. Process Id 1
belongs to init without which your system cannot run
Best Answer
There is the infamous
lsof
:In this case aptitude is using the file. You should use root in case you are not sure which user is locking the file. It's useful for a bunch of things too, sadly it doesn't come installed with Ubuntu, so you have to install it first.
For the rest of mortals, there's the
fuser
command. This is peculiar since it only returns the PID instead of the name of the process:Here it says that the file and PID, which is 4974, so we must investigate who is: