
Я написал программу для встроенной системы Linux (petalinux). Она отлично работает при запуске из терминала или отладчика TCF. Однако я хочу, чтобы она запускалась при запуске системы, поэтому я использую start-stop-daemon. Это работало в какой-то части, но теперь она полностью останавливается. Я вижу, что программа запускается правильно, открывает некоторые файлы для доступа GPIO и I2C и может правильно работать с ними. Затем, примерно через 8 секунд, эти дескрипторы файлов внезапно становятся плохими (Errno 9), и программное обеспечение аварийно завершает работу или, по крайней мере, больше не работает.
Дальнейшее тестирование показало, что то же самое происходит и при запуске программы в фоновом режиме через bash-скрипт:
#!/bin/bash
/home/user/myApp.elf &
Не помещать его в фон работает в этом скрипте. Также работает запуск программы напрямую из терминала в фоновом режиме. Я прибегнул к запуску его напрямую через скрипт /etc/profile.d, что является скорее обходным путем в качестве решения.
Я подозревал, что есть переполнение памяти или повреждение, но запуск программы напрямую всегда работал, в то время как запуск в фоновом режиме всегда терпел неудачу, что не пахнет явной проблемой памяти для меня. Так, происходит ли какая-то магия Linux или странности с процессами в фоновом режиме, когда их файловые дескрипторы изменяются или модифицируются? Может, происходит что-то с управлением памятью, с чем я не справляюсь правильно? Может, есть какой-то системный вызов, с которым я не справляюсь правильно?