我编写了一个 C 应用程序,它抓取一些传感器数据并将其放入字符串中。该字符串被传递给 gammu-smsd-inject 以供 SMSD 传输。作为参考,我的应用程序使用 fork() 和 wait() 启动 gammu-smsd-inject。程序等待 gammu-smsd-inject 终止,然后自行退出。
我的程序运行良好:如果我从 bash 提示符手动运行它,它会抓取传感器数据,调用 gammu-smsd-inject 并退出。短信出现在数据库发件箱中,并且在我收到手机短信后不久。
我已将程序的绝对路径添加到 SMSD 的 runonreceive 指令中。当我向 SMSD 发送文本时,它会在收件箱中收到,从日志文件中我可以看到守护程序正在运行我的程序。然后日志文件指出进程(我的程序)成功退出(0),但我从未收到任何短信,并且没有任何内容添加到数据库的发件箱或 sentitems 表中。
知道会发生什么吗?我没有发布代码清单,因为它很长,但它是可用的。
我能想到的唯一可能发生的想法是 gammu-smsd-inject 可能正在被终止(由树上某处的父进程),然后才有机会执行任何 SQL 操作。这不会创建一个非零退出代码吗?