2009-05-30 6 views
1

これは設計上の決定事項であり、別のサービスを採用する際の手間と欠点を理解しています。したがって、2つの無関係なサーバを持つ2つのサービス、1つはポート10000でリッスンし、もう1つは3つの異なるポートを介して3つの異なる要求に応答するxinetdサーバです(クライアントはnc server port1 | port2 | port3を使用してデータを取得します)。シグナルハンドリングの欠陥を再定義する

セキュリティ上の問題のために、xinetdサーバーは停止しなければならず、最初のサーバーが同じデータを保持しているため、xinetdサーバーをUSR1信号を最初のサーバーに送信し、公開データ。したがって、第1のサーバにおける信号処理を再定義するロジックを追加する必要がある。たとえば、xinetdサーバーでkill -10 first_serverを実行すると、最初のサーバーは古いサーバーが発行したデータと同じデータを吐き出し、最初のポートにダンプします(USR1(10,16、および30) 。議論は、これは悪い設計です。なぜならそれはUNIXシグナルの使用法を乱用し、もちろんPOXISとLinuxがあらかじめ定義した10,16、および30の記号の振る舞いを再定義したからです。これは技術的に本当に悪いですか?システムにどんな害が及ぶでしょうか?

答えて

1

10はSIGBUSです。バスエラーです。おそらくそれに触れないでください。 30および31は、SIGUSR1およびSIGUSR2であり、ユーザー定義であり、特定の目的のために予約されていません。 16はSIGURGであり、必要ではないかもしれないソケット上の緊急データですが、31以上のリアルタイム信号を使用する方が良いでしょう。

+0

です。それはかなり意味がある。使用されていないsignumを使用するように変更した場合、このケースではIPCを扱う良い方法ですか? – jimx

+0

シグナルは割り込み操作で良い(ポーリングする必要はありません)と悪い(信号を処理しようとするならerrno == EINTRをチェックする必要があります)。あなたのアプリについてもっと知っていなくても、言うことは難しいです。 – Dave

+0

私たちのアプリはrpcサーバーであり、SIGTERM(優雅な停止、余分な内部クリーニング作業を行う)とSIGHUP(設定とログの再読み込み)を別に処理しますが、すべてのSIGはsysのデフォルトとして使用されます。引数の1つは、シグナルは、情報を転送するのではなく、内部状態を変更するためにプロセスに通知するためだけに使用されるべきであるということです。この場合、RPCコールのようなものですが、サーバーに書き込むことを望まない余分な3つのポートに – jimx

関連する問題