0

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

4

1 回答 1

0

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

于 2014-12-23T09:29:04.760 回答