Демонизация kernel_thread

Тема в разделе "WASM.UNIX", создана пользователем Shockk, 7 мар 2009.

  1. Shockk

    Shockk New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2007
    Сообщения:
    3
    Добрый день! Пишу модуль который создает kernel thread, который в свою очередь ловит signal-ы и соответствующим образом на них реагирует ... Беда в том, что после запуска модуля, он "повисает" в консоле ... Т.е. если я все правильно понимаю, родитель ждет завершения чайлда ... А надо чтобы модуль загружался в память, и возвращался в консоль. Подскажите, как это правильно сделать ? В остальном модуль правильно работает.

    Код (Text):
    1. int
    2. netf_thread(void *empty)
    3. {
    4.     spin_lock_irq(&current->sighand->siglock);
    5.     sigfillset(&current->blocked);
    6.     siginitsetinv(&current->blocked, sigmask(SIGUSR1) | sigmask(SIGTERM));
    7.     recalc_sigpending();
    8.     spin_unlock_irq(&current->sighand->siglock);
    9.  
    10.     daemonize("netf");
    11.  
    12.    do {
    13.  
    14.          .............................
    15.  
    16.     } while ( 1 != atomic_read( &m_exit ) );
    17.  
    18.      complete_and_exit( &thread_complete, 0 );
    19. }
    20.  
    21.  
    22. static int __init
    23. init_netf_module(void)
    24. {
    25.     ...................
    26.  
    27.     init_completion(&thread_complete);
    28.     thread_pid = kernel_thread( netf_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD );
    29.  
    30.     if ( thread_pid < 0 ) {
    31.         return -ENOMEM;
    32.     }
    33.  
    34.     ...................
    35. }