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.