저는 임베디드 Linux 시스템(petalinux)용 프로그램을 작성했습니다. 터미널이나 TCF 디버거에서 실행하면 정상적으로 실행됩니다. 하지만 시스템이 시작될 때 실행되기를 원하므로 start-stop-daemon을 사용합니다. 이것은 어떤 면에서는 효과가 있었지만 지금은 완전히 중단되었습니다. 내가 본 것은 프로그램이 올바르게 시작되고, GPIO 및 I2C 액세스를 위해 일부 파일을 열고, 해당 파일에서 올바르게 작동할 수 있다는 것입니다. 그런 다음 약 8초 후에 이러한 파일 설명자가 갑자기 손상되고(Errno 9) 소프트웨어가 충돌하거나 적어도 더 이상 작동하지 않습니다.
추가 테스트에서는 bash 스크립트를 통해 백그라운드에서 프로그램을 시작할 때도 이런 일이 발생하는 것으로 나타났습니다.
#!/bin/bash
/home/user/myApp.elf &
이 스크립트에서는 백그라운드에 넣지 않고도 작동합니다. 또한 백그라운드 터미널에서 직접 프로그램을 시작할 수도 있습니다. 나는 /etc/profile.d 스크립트를 통해 직접 시작했는데, 이는 솔루션처럼 보입니다.
나는 이전에 어떤 종류의 메모리 오버플로나 손상을 의심했지만 지금까지 프로그램을 직접 실행하는 것은 항상 작동하지만 백그라운드에서 시작하는 것은 항상 실패합니다. 이는 나에게 명백한 메모리 문제처럼 보이지 않습니다. 그렇다면 백그라운드 프로세스의 파일 설명자가 변경되거나 수정될 때 일부 Linux 마법이나 이상한 현상이 발생합니까? 제가 올바르게 처리하지 못하는 메모리 관리 문제가 있나요? 제가 올바르게 처리하지 못하는 시스템 호출이 있나요?