lkml.org 
[lkml]   [2005]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectGracefully killing kswapd, or any kernel thread
From
Date
Hello,

I'm trying to kill a kernel thread gracefully, in particular kswapd,
without any success.

The goal is to start another kernel thread that contains updated kswapd
functionality, through a loadable module; no kernel recompilation.

I noticed that kernel threads block SIGKILL. Hence, on module load I'm
running:

task = find_task_by_name("kswapd");
if (task != NULL) {
spin_lock_irq(&task->sigmask_lock);
sigdelset(&task->blocked, SIGKILL);
recalc_sigpending(task);
spin_unlock_irq(&task->sigmask_lock);
// Also tried issuing here a: kill_proc(task->pid, SIGKILL, 1);
}

Then from userspace I issue:

# ps aux |grep -i swap
root 4 0.0 0.0 0 0 ? SW 18:36 0:00 [kswapd]
$ kill -9 4

After the kill is issued, kswapd is taking up 99.9% of CPU time and
remains at a runnable state:
# ps aux |grep -i swap
root 4 0.2 0.0 0 0 ? RW 18:36 0:02 [kswapd]


Can anyone explain why this is happening ? I've tried this with linux
kernels 2.2.19 and 2.4.27 (with patch kdb-4.3). What is the proper way
of gracefully killing a kernel thread launched from the original kernel
image (not a module) in kernels < 2.6 (ie. without the new kernel thread
API that contains the stop_kthread call documented in
http://www.scs.ch/~frey/linux/kernelthreads.html)

I've also tried the same with kflushd, kupdate, and keventd in 2.2.19.
When I do issue a "kill -9" for them I see:

# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? SW 12:18 0:00 [kflushd]
root 3 1.5 0.0 0 0 ? RW 12:18 0:16 [kupdate]
root 5 0.0 0.0 0 0 ? SW 12:18 0:00 [keventd]

All 3 kernel threads remain in the process list. kupdate also appears to
be in a running state consuming 99.9% of the CPU when killed. What's so
special about kupdate and kswapd that makes them stay at a running
state, and why do all kernel threads seem unkillable?

Thanks,
Kristis

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-09-07 21:43    [W:0.057 / U:0.372 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site