
He escrito un programa para un sistema Linux integrado (petalinux). Funciona bien cuando se inicia desde la terminal o el depurador TCF. Sin embargo, quiero que se ejecute cuando se inicie el sistema, así que uso el demonio start-stop. Esto funcionó durante una parte, pero ahora se detiene por completo. Lo que veo es que el programa inicia correctamente, abre algunos archivos para acceso GPIO e I2C y puede operar correctamente sobre ellos. Luego, después de unos 8 segundos, estos descriptores de archivos de repente fallan (Errno 9) y el software falla o al menos ya no funciona.
Pruebas adicionales revelaron que esto también sucede cuando se inicia el programa en segundo plano mediante un script bash:
#!/bin/bash
/home/user/myApp.elf &
No ponerlo en segundo plano funciona en este script. Además, iniciar el programa directamente desde la terminal en segundo plano funciona. Recurrí a ejecutarlo directamente a través de un script /etc/profile.d, que es más bien una solución alternativa.
Sospeché algún tipo de desbordamiento de memoria o corrupción antes, pero ejecutar el programa directamente siempre funcionó hasta ahora, mientras que ejecutarlo en segundo plano siempre falló, lo que no me parece un problema de memoria obvio. Entonces, ¿hay alguna magia o rareza de Linux en los procesos en segundo plano donde sus descriptores de archivos cambian o se modifican? ¿Hay algún problema con la gestión de la memoria que no manejo correctamente? ¿Hay alguna llamada al sistema que no manejo correctamente?