我编写了一个C应用程序,它抓取一些传感器数据并将其放入一个字符串中。该字符串被传递给gammu-smsd-inject以供SMSD传输。作为参考,我的应用程序使用fork()和amp;来启动gammu-smsd-inject。等待()。该程序等待gammu-smsd-inject终止然后退出。
我的程序运行正常:如果我从bash提示符手动运行它,它会抓取传感器数据,调用gammu-smsd-inject并退出。在我的手机上收到短信后不久,短信出现在数据库发件箱中。
我已将程序的绝对路径添加到SMSD的runonreceive指令中。当我向SMSD发送文本时,它会在收件箱中收到,从日志文件中我可以看到运行我的程序的守护程序。然后日志文件声明进程(我的程序)成功退出(0),但我从未收到任何短信,并且没有任何内容被添加到数据库的发件箱或发送项目表中。
知道可能会发生什么吗?我没有发布代码清单,因为它很长,但它可用。
我能想到的唯一想法是gammu-smsd-inject可能被终止(由树上某处的父进程终止)之前它有机会做任何SQL的东西。这不会创建非零退出代码吗?
答案 0 :(得分:0)
所以问题是用户在运行程序。当我从bash手动运行我的应用程序时,它使用我的用户ID启动它,但是当SMSD守护程序运行它时,它使用不同的ID启动,由于某种原因导致问题。我认为用户ID用于访问mysql数据库是一个问题,但显然不是。简而言之,我实际上并不知道问题是什么,但通过将登录的UID分配给子进程,一切都突然发挥作用。