当程序在后台运行时文件描述符被损坏

当程序在后台运行时文件描述符被损坏

我为嵌入式Linux系统(petalinux)编写了一个程序。从终端或 TCF 调试器启动时,它运行良好。但是,我希望它在系统启动时运行,因此我使用了 start-stop-daemon。这在某些方面有效,但现在完全停止了。我看到的是程序正确启动,打开一些用于 GPIO 和 I2C 访问的文件,并且可以正确地对它们进行操作。然后,大约 8 秒后,这些文件描述符突然变坏(Errno 9),并且软件崩溃或至少不再工作。

进一步的测试表明,通过 bash 脚本在后台启动程序时也会发生这种情况:

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

在此脚本中,不将其放在后台是可行的。此外,直接从后台终端启动程序也是可行的。我通过 /etc/profile.d 脚本直接启动它,这更像是一种解决方案。

我之前怀疑存在某种内存溢出或损坏,但到目前为止直接执行程序总是有效,而在后台启动它总是失败,这对我来说并不像是明显的内存问题。那么,后台进程的文件描述符发生变化或被修改时,是否会发生一些 Linux 魔法或怪异现象呢?是否有一些内存管理问题我没有正确处理?是否有一些我没有正确处理的系统调用?

相关内容