Os descritores de arquivos são corrompidos quando o programa é executado em segundo plano

Os descritores de arquivos são corrompidos quando o programa é executado em segundo plano

Eu escrevi um programa para um sistema Linux embarcado (petalinux). Ele funciona bem quando iniciado a partir do terminal ou do depurador TCF. No entanto, quero que ele seja executado quando o sistema for iniciado, então uso o daemon start-stop. Isso funcionou até certo ponto, mas agora para completamente. O que vejo é que o programa inicia corretamente, abre alguns arquivos para acesso GPIO e I2C e consegue operar neles corretamente. Então, após cerca de 8 segundos, esses descritores de arquivo ficam repentinamente ruins (Errno 9) e o software trava ou pelo menos não funciona mais.

Testes adicionais revelaram que isso também acontece ao iniciar o programa em segundo plano por meio de um script bash:

#!/bin/bash
/home/user/myApp.elf &

Não colocá-lo em segundo plano funciona neste script. Além disso, iniciar o programa diretamente do terminal em segundo plano funciona. Recorri a iniciá-lo diretamente por meio de um script /etc/profile.d, que é mais uma solução alternativa.

Eu suspeitava de algum tipo de estouro de memória ou corrupção antes, mas executar o programa diretamente sempre funcionou até agora, enquanto iniciá-lo em segundo plano sempre falhou, o que não me parece um problema de memória óbvio. Então, há alguma mágica ou estranheza do Linux acontecendo nos processos em segundo plano, onde seus descritores de arquivo mudam ou são modificados? Há alguma coisa de gerenciamento de memória acontecendo que eu não resolvo corretamente? Existe alguma chamada de sistema que não administrei corretamente?

informação relacionada