¿Por qué no hay salida en la consola en el manejo de la señal?
Estaba probando este programa de Programación Avanzada en Unix Environment.
#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;
}
Estoy usando Ubuntu 11.10. Compilo el programa con gcc y luego ejecuto a.out como se indica en el libro.
$. / a.out & [1] + 1345
$ kill -USR1 1345
Pero no hay salida impresa. El programa se sigue ejecutando en backgound y tengo que matarlo.
Otras cosas que he probado:
Intenté manejar SIGINT para ver si la ejecución del programa en segundo plano está causando problemas. Todavía no hay salida.
Descargué la última versión de FreeBSD y probé el mismo programa, pero con el mismo problema.
Puse una declaración printf antes de configurar el manejador de señal:
int main(){
printf("printf is working...");
//exit(0);
if(signal(SIGUSR1, handler) == SIG_ERR)
...
cuando se comenta exit (), no hay salida. Cuando lo descomente, se imprime la salida.
Por favor, dime, ¿qué estoy haciendo mal en esto?
PD: No sugieras utilizar sigaction (). Estoy aprendiendo programación de Unix, no construyendo ninguna aplicación práctica.