0

いくつかのセンサー データを取得して文字列に入れる 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 処理を実行する機会を得る前に (ツリーのどこかにある親プロセスによって) 終了されている可能性があるということです。しかし、これはゼロ以外の終了コードを作成しませんか?

4

1 に答える 1

0

したがって、問題は、どのユーザーがプログラムを実行していたかでした。アプリケーションを bash から手動で実行すると、ユーザー ID で起動されますが、SMSD デーモンで実行すると別の ID で起動され、何らかの理由で問題が発生しました。mysql データベースへのアクセスに使用されているユーザー ID に問題があると思いましたが、そうではないようです。要するに、実際に何が問題だったのかはわかりませんが、ログインの UID を子プロセスに割り当てることで、すべてが突然機能しました。

于 2014-12-23T09:29:04.760 に答える