Pode ser que seja um bug no kernel ou no programa que você está rastreando?
O programa pode ter implementado incorretamente o loop de eventos que aguarda erros incorretos, mas aguarda outras coisas após EINTR .
Exemplo:
for(;;) {
select(...);
if(FD_SET(...i...)) {
read(...i...);
write(...j...); // Naive blocking write
}
}
Ele funcionará em testes triviais, mas todo o programa pode bloquear se qualquer bloco de gravação.
Suspender / retomar o programa interrompe o bloqueio de write e faz com que o loop principal continue.