Почему нет вывода на консоль при обработке сигналов?

Я пробовал эту программу из Advance Programming в среде Unix.

#include<stdio.h>
#include<signal.h>

static void handler(int sig){
    if(sig == SIGUSR1)
        printf("handled user1 signal");
    else if(sig == SIGUSR2)
        printf("handles user2 signal");
    else
        printf("unkown signal");
}

int main(){

    if(signal(SIGUSR1, handler) == SIG_ERR)
        printf("can't handle signal SIGUSR1");
    if(signal(SIGUSR2, handler) == SIG_ERR)
        printf("can't handle signal SIGUSR2");
    for(;;)
        pause();
    return 0;
}

Я использую Ubuntu 11.10. Я компилирую программу с помощью gcc, а затем запускаю a.out, как указано в книге.

$./a.out& [1]+ 1345

$ kill -USR1 1345

Но вывод не печатается. Программа продолжает работать в фоновом режиме, и я должен убить его.

Другие вещи, которые я пробовал:

Tried handling SIGINT to see if running program in background is causing problems. Still no output.

Downloaded latest release of FreeBSD and tried the same program on it, but with same problem.

I put a printf statement before setting signal handler:

int main(){
    printf("printf is working...");
    //exit(0);
    if(signal(SIGUSR1, handler) == SIG_ERR)
    ...

когда комментарий () прокомментирован, выход не выводится. Когда я раскомментирую это, вывод печатается.

Пожалуйста, скажите мне, что я делаю не так в этом?

PS: не предлагайте использовать sigaction (). Я изучаю программирование Unix, а не строю какие-либо практические приложения.

Ответы на вопрос(1)

Ваш ответ на вопрос