привет, об источнике 10.11 в «APUE» о сигнале - PullRequest
1 голос
/ 13 апреля 2011

Я прочитал «APUE» и обнаружил, что пример 10.11 не может дать правильный ответ. файл 10.11:

static void sig_quit( int );

int main( void )
{
        sigset_t newmask, oldmask, pendmask;

        if ( signal( SIGQUIT, sig_quit ) == SIG_ERR )
                err_sys( "can't catch SIGQUIT" );

        sigemptyset( &newmask );
        sigaddset( &newmask, SIGQUIT );

        /* block SIGQUIT and save current signal mask */
        if ( sigprocmask( SIG_BLOCK, &newmask, &oldmask ) < 0 )
                err_sys( "SIG_BLOCK error" );

        sleep( 5 );     /* SIGQUIT here will remain pending */

        if ( sigpending( &pendmask ) < 0 )
                err_sys( "sigpending error" );
        if ( sigismember( &pendmask, SIGQUIT ) )
                printf( "\nSIGQUIT pengding\n" );

        /* reset signal mask which unblocks SIGQUIT */
        if ( sigprocmask( SIG_SETMASK, &oldmask, NULL ) > 0 )
                err_sys( "SIG_SETMASK error" );
        printf( "SIGQUIT unblocked\n" );

        sleep( 5 );     /* SIGQUIT here will terminate with core file */

        exit( 0 );
}

static void sig_quit( int signo )
{
        printf( "caught SIGQUIT\n" );

        if ( signal( SIGQUIT, SIG_DFL ) == SIG_ERR )
                err_sys( "can't reset SIG_QUIT" );

        return ;
}

когда я выполню ./a.out и наберу ctrl + c менее чем за 5 секунд, программа будет немедленно завершена. если он работает правильно в «APUE», он напечатает:

^\
SIGQUIT pending
caught SIGQUIT
SIGQUIT unblocked
^\Quit(coredump) 

Я новичок в изучении сигнала. Подскажите, пожалуйста, как понять, почему? Я могу использовать GDB, когда появились другие ошибки. но сигнал, так что, пожалуйста, спасибо я работаю в Ubuntu 10.04

1 Ответ

1 голос
/ 13 апреля 2011

CTRL+C генерирует SIGINT, CTRL-\ генерирует SIGQUIT. См. Сигналы завершения - Библиотека GNU C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...