Подскажите, есть модуль создающий поток, который должен отлавливать определенные сигналы. Но проблема в том, что поток вообще не видит сигналов, вот код:
int
netf_thread(void *empty)
{
spin_lock_irq( ¤t->sighand->siglock );
sigfillset( ¤t->blocked );
siginitsetinv( ¤t->blocked, sigmask(SIGUSR1) | sigmask(SIGTERM) );
recalc_sigpending();
spin_unlock_irq( ¤t->sighand->siglock );
daemonize("netf");
do {
set_current_state( TASK_INTERRUPTIBLE );
schedule_timeout( 2 * HZ );
if ( signal_pending( current )) {
# никак не попаду в эту часть кода при посылки сигнала
# через kill -9 <pid>
#
# а также не ловится через вызов:
# kill_proc( thread_pid, SIGTERM, 1 );
}
} } while ( !atomic_read( &f_exit ) );
}
static int __init
init_netf_module(void)
{
init_completion( &thread_complete );
thread_pid = kernel_thread( netf_thread, NULL, CLONE_FS | СLONE_SIGHAND );
if ( thread_pid < 0 ) {
printk("Can't create thread\n");
return -ENOMEM;
}
return 0;
}
static void __exit
cleanup_netf_module(void)
{
atomic_set( &f_exit, 1 );
kill_proc( thread_pid, SIGTERM, 1 );
wait_for_completion( &thread_complete );
}
В чем ошибка ?