【问题标题】:Gammu-smsd runonreceive returns 0 but no program outputGammu-smsd runonreceive 返回 0 但没有程序输出
【发布时间】:2014-12-23 17:29:53
【问题描述】:

我编写了一个 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 操作之前被终止(由树上某处的父进程)。这不会创建一个非零退出代码吗?

【问题讨论】:

  • 请不要在标题中添加“SOLVED”。表明您的问题已解决的方法是接受答案。如果您自己找到了答案,您可以发布自己的答案并接受它。

标签: c++ fork gammu


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多