[Beowulf] Kernel_thread problem
Zhang Hui
spacetiller at 163.com
Tue Nov 1 05:46:09 PST 2005
Hello,all
I have forked two thread in kernel state with the function kernel_thread:
kernel_thread(myfunc1,NULL,0);
kernel_thread(myfunc2,NULL,0);
But i find it's hard to stop them with the function following:
int stop_myfunc1(void)
{
DECLARE_WAITQUEUE(wait, current);
if (!myfunc1_pid)
return -ESRCH;
IP_VS_INFO("stopping myfunc1 thread %d ...\n", myfunc1_pid);
__set_current_state(TASK_UNINTERRUPTIBLE);
add_wait_queue(&stop_myfunc1_wait, &wait); //stop_myfunc1_wait declared before
wake_up(&sync_wait);
schedule();
__set_current_state(TASK_RUNNING);
remove_wait_queue(&stop_myfunc1_wait, &wait);
/* it is probably not correct here. we need use sys_wait4, but need
to patch the kernel to export sys_wait4, check it later...
sys_wait4(myfunc1_pid, NULL, __WCLONE, NULL); */
waitpid(myfunc1_pid, NULL, __WCLONE);
return 0;
}
int stop_myfunc2(void) { /* the same with above */ }
What's the problem?
Zhang Hui
spacetiller at 163.com
2005-11-01
More information about the Beowulf
mailing list