私は問題を見つけました..
問題は、system() コマンドを発行する mongoose コールバック スレッドが、次の行があるため、戻りステータスを待機しないことでした。
サーバースレッドを開始する mg_start() 関数には、次の行が含まれています。
mg_start()
行番号 5159:
(void) signal(SIGCHLD, SIG_IGN);
これは、ゾンビ プロセスを作成しないようにするためです。
参照: http://www.win.tue.nl/~aeb/linux/lk/lk-5.html
しかし、QNXのドキュメントによると、
「保留中のシグナルに対してシグナル アクションを に設定するSIG_IGN
と、ブロックされているかどうかに関係なく、保留中のシグナルが破棄されます。SIGCHLD
プロセスがシグナル
のアクションを に設定した場合SIG_IGN
、動作は未規定です。」</p>
SIG_IGN
onを呼び出すSIGCHLD
と、親プロセスは子プロセスからのステータス シグナルを無視します。
呼び出しを行うsystem()
と、起動中のシェルからの SIGCHLD シグナルがブロックされます。UNIXのドキュメントによると:
SIGCHLD
「子が終了するのを待っている間にブロックすると、アプリケーションがシグナルをキャッチして、system() の子プロセスからステータスを取得してからsystem()
、ステータス自体を取得できなくなります。」</p>
しかし、マングースはシグナルを破棄するため、からのシグナルをまったく待ちませんsystem()
。
からの有効な戻りステータスなしで、応答を提供し続けるだけですsystem()
。
とりあえず、この行をコメントアウトしました。そしてそれは働いています。