[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