私のアプリケーションのフロント エンドとバック エンドは、それぞれ Java と C を使用しています。インターフェイスは、C 側のリスナー プロセス経由です。c 側でエラーが発生した場合、ユーザーにサービスを提供している対応するリスナー プロセスを停止する必要があります。
しかし、いずれかのケースでリスナーがダウンすることはありませんでした。私は脳を破壊しましたが、それを解読することはできないようです.
リスナーサービスをトラスしたとき、これが私が気づいたことです。
15269900: 57278597: 0.0002: _getpid() = 15269900
15269900: 57278597: 0.0009: _esend(11, 0x090000000B3B6F72, 1, 1, 0x0000000000000000) = 1
15269900: 57278597: kwrite(11, "\0\v\0\0\f\0\0\001\002", 11) = 11
15269900: 57278597: kread(11, "\0\v\0\0\f\0\0\001\001\0".., 8208) = 22
15269900: 57278597: 1.0974: kread(11, "\0\v\0\0\f\0\0\001\002\0".., 8208) (sleeping...)
15269900: 57278597: 4.5260: kread(11, "\0\v\0\0\f\0\0\001\002\0".., 8208) (sleeping...)
そして、ここで待つだけです。
このpidのprocstackは以下を示しています
0x0000000000000000 ????????() + ??
procstack: write(/proc/15269900/ctl): The requested resource is busy.
私は調査を行いましたが、まだこれを理解することができません。プロセスがここでハングアップする理由を誰かが教えてくれますか?