Установите ваш обработчик сигнала без флаг SA_RESTART
:
void handler( int sig, siginfo_t *si, void *arg )
{
...
}
...
struct sigaction newact;
memset( &newact, 0, sizeof( newact ) );
sigemptyset( &newact.sa_mask );
newact.sa_flags = SA_SIGINFO; // note that **lack** of SA_RESTART
newact.sa_siginfo = handler;
sigaction( SIGINT, &newact, NULL );
Вы должны будете добавить проверку ошибок к этому, и обратите внимание, что теперь вам придется обрабатывать прерванныезвонки в вашем коде.