いくつかのセンサー データを取得して文字列に入れる C アプリケーションを作成しました。この文字列は、SMSD による送信のために gammu-smsd-inject に渡されます。参考までに、私のアプリケーションは fork() & wait() を使用して gammu-smsd-inject を起動します。プログラムは gammu-smsd-inject が終了するのを待ってから終了します。
私のプログラムは問題なく動作します。bash プロンプトから手動で実行すると、センサー データが取得され、gammu-smsd-inject が呼び出されて終了します。SMS はデータベースの送信トレイに表示され、電話で SMS を受信した直後に表示されます。
プログラムへの絶対パスを SMSD の runonreceive ディレクティブに追加しました。テキストを SMSD に送信すると、受信トレイに受信され、ログ ファイルからプログラムを実行しているデーモンを確認できます。ログファイルには、プロセス (私のプログラム) が正常に終了した (0) と記載されていますが、SMS をまったく受信せず、データベースの送信ボックスまたは送信アイテム テーブルには何も追加されません。
何が起こっているのでしょうか?コードリストはかなり長いので掲載していませんが、入手可能です。
それが起こっていると私が考えることができる唯一の考えは、gammu-smsd-inject が SQL 処理を実行する機会を得る前に (ツリーのどこかにある親プロセスによって) 終了されている可能性があるということです。しかし、これはゼロ以外の終了コードを作成しませんか?