2014-10-29 77 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分配給子進程,一切都突然生效。