Esegue subito la tua signal_handler mia in quanto chiami la funzione invece di passare l'indirizzo.
signal(SIGINT,mia);
Nella struttura sigaction il tuo puntatore a funzione è così dichiarato:
...
void (*sa_handler)(int);
...
Il parametro int che vedi è riferito al passaggio dell'azione ricevuta e non della tua variabile i.
Per cui la tua handler riceverà un int del segnale ricevuto.
EDIT:
Tieni presente che i segnali sono dipendenti dal sistema operativo.
Nel mio sistema Linux leggo nella struct sigaction definizioni extra legate al POSIX199309 e al flag SA_SIGINFO:
void (*sa_sigaction) (int, siginfo_t *, void *);
~Max