
我為嵌入式Linux系統(petalinux)寫了一個程式。從終端或 TCF 偵錯器啟動時,它運作良好。但是,我希望它在系統啟動時運行,因此我使用了 start-stop-daemon。這在某些方面有效,但現在完全停止了。我看到的是程式正確啟動,打開一些用於 GPIO 和 I2C 存取的文件,並且可以正確地對它們進行操作。然後,大約 8 秒後,這些檔案描述符突然變壞(Errno 9),軟體崩潰或至少不再工作。
進一步的測試表明,透過 bash 腳本在後台啟動程式時也會發生這種情況:
#!/bin/bash
/home/user/myApp.elf &
在此腳本中,不將其放在後台是可行的。此外,直接從後台終端啟動程序也是可行的。我透過 /etc/profile.d 腳本直接啟動它,這更像是一種解決方案。
我之前懷疑存在某種記憶體溢出或損壞,但到目前為止直接執行程式總是有效,而在後台啟動它總是失敗,這對我來說並不像是一個明顯的記憶體問題。那麼,後台進程的檔案描述子發生變化或被修改時,是否會發生一些 Linux 魔法或怪異現象呢?是否有一些記憶體管理問題我沒有正確處理?是否有一些我沒有正確處理的系統呼叫?