프로그램이 백그라운드에서 실행될 때 파일 설명자가 손상됩니다.

프로그램이 백그라운드에서 실행될 때 파일 설명자가 손상됩니다.

나는 임베디드 리눅스 시스템(petalinux)을 위한 프로그램을 작성했습니다. 터미널이나 TCF 디버거에서 시작하면 정상적으로 실행됩니다. 하지만 시스템이 시작될 때 실행되기를 원하므로 start-stop-daemon을 사용합니다. 이것은 어느 정도 효과가 있었지만 이제는 완전히 멈췄습니다. 내가 본 것은 프로그램이 올바르게 시작되고 GPIO 및 I2C 액세스를 위해 일부 파일을 열고 해당 파일에서 올바르게 작동할 수 있다는 것입니다. 그런 다음 약 8초 후에 이러한 파일 설명자가 갑자기 불량해지고(Errno 9) 소프트웨어가 충돌하거나 적어도 더 이상 작동하지 않습니다.

추가 테스트를 통해 이는 bash 스크립트를 통해 백그라운드에서 프로그램을 시작할 때도 발생하는 것으로 나타났습니다.

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

이 스크립트에서는 백그라운드에 넣지 않는 것이 작동합니다. 또한 백그라운드에서 터미널에서 직접 프로그램을 시작하는 것도 가능합니다. 나는 해결책으로서의 해결 방법에 더 가까운 /etc/profile.d 스크립트를 통해 직접 실행하는 방법을 사용했습니다.

이전에는 일종의 메모리 오버플로 또는 손상이 의심되었지만 프로그램을 직접 실행하는 것은 지금까지 항상 작동했지만 백그라운드에서 실행하는 것은 항상 실패했습니다. 이것은 나에게 명백한 메모리 문제처럼 느껴지지 않습니다. 그렇다면 파일 설명자가 변경되거나 수정되는 백그라운드 프로세스에 Linux 마법이나 이상한 현상이 발생합니까? 제가 올바르게 처리하지 못하는 메모리 관리 작업이 진행되고 있나요? 내가 올바르게 처리하지 못하는 일부 시스템 호출이 있습니까?

관련 정보