2014-10-29 75 views
0

我写了一个C应用程序,它捕获一些传感器数据并将其放入一个字符串中。这个字符串被传递给gammu-smsd-inject以通过SMSD进行传输。作为参考,我的应用程序使用fork()& wait()启动gammu-smsd-inject。程序等待gammu-smsd-inject终止,然后退出。Gammu-smsd runonreceive返回0,但没有程序输出

我的程序工作得很好:如果我从bash提示符手动运行它,它抓住传感器数据,调用gammu-smsd-inject并退出。短信出现在数据库发件箱中,并在我的手机上收到短信后不久。

我已经将我的程序的绝对路径添加到了SMSD的runonreceive指令中。当我向SMSD发送文本时,它会在收件箱中收到,并从日志文件中看到运行我的程序的守护进程。然后日志文件声明进程(我的程序)成功退出(0),但我从来没有收到任何短消息,也没有任何内容添加到数据库的发件箱或sentitems表中。

任何想法可能会发生什么?我还没有发布代码清单,因为它很长,但它是可用的。

唯一能想到的情况就是gammu-smsd-inject可能会被终止(通过树上的某个父进程),在它有机会做任何SQL的事情之前。这不会创建一个非零的退出代码吗?

+0

请不要将“已解决”添加到标题中。表明你的问题已经解决的方法是接受一个答案。如果你自己找到答案,那么发布自己的答案并接受答案是完全可以的。 – 2014-11-02 23:04:11

回答

0

所以问题是哪个用户正在运行该程序。当我使用bash手动运行我的应用程序时,它使用我的用户ID启动它,但是当SMSD守护程序运行它时,它是由一个不同的ID启动的,由于某些原因导致问题。我认为这是用户ID用于访问MySQL数据库的问题,但显然不是。总之,我实际上并不知道问题所在,但是通过将登录的UID分配给子进程,一切都突然生效。