Gammu-smsd runonreceive返回0但没有程序输出

时间:2014-10-29 22:14:28

标签: c++ fork gammu

我编写了一个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的东西。这不会创建非零退出代码吗?

1 个答案:

答案 0 :(得分:0)

所以问题是用户在运行程序。当我从bash手动运行我的应用程序时,它使用我的用户ID启动它,但是当SMSD守护程序运行它时,它使用不同的ID启动,由于某种原因导致问题。我认为用户ID用于访问mysql数据库是一个问题,但显然不是。简而言之,我实际上并不知道问题是什么,但通过将登录的UID分配给子进程,一切都突然发挥作用。