3

いくつかのさまざまな UNIX プラットフォーム (この問題は SunOS 5.10 で発生しています) 用に C で書かれた小さなデーモン アプリケーションがあります。これは基本的に、シリアル ポートを開き、そのポートを介して入ってくる情報をリッスンするだけです。

この特定の例では、デーモンは、シリアル ポート経由で送信された単一の送信 (ファイルの価値のあるデータなど) を読み取ったように見え、SIGINT を受信します。これは毎回起こります。他の顧客は、SIGINT を受信せずにこのセットアップを非常によく似た方法で使用します。明らかに、ユーザーは Ctrl-C を押していません。比較的単純なシグナル ハンドラーが用意されているので、それが起こっていることは確実にわかります。

他に何がこれを引き起こしている可能性がありますか? ここの質問をグーグルで調べてみると、SIGINTを引き起こす可能性のある他のことについての説明があまり見つかりませんでした。また、コードを調べたところ、raise() への呼び出しはなく、とにかく SIGINT を送信しない kill(pid, 0) への単一の呼び出ししか見つかりませんでした。

どんな考えや洞察も間違いなく高く評価されます。

4

3 に答える 3

2

シリアルポートをプロセスの制御端末にしたくない場合は、openフラグを使用して開きO_NOCTTYます。制御端末の場合、シリアル ポートからのデータは、割り込みまたはその他の特殊文字として解釈される場合があります。

于 2009-07-06T20:07:19.693 に答える
1

シグナルハンドラーがどのようにアタッチされているかは言いませんでしたが、sigaction(2)を使用してアタッチして を取得できるsiginfo_t場合、シグナルを送信した pid が含まれるように見えます ( si_pid)。

于 2009-07-06T19:42:00.057 に答える
0

同様の症状を持つ問題のデバッグに関する興味深いブログ投稿を見つけました。同じ問題だとは思えませんが、信号の発信元を追跡するための非常に役立つデバッグのヒントがいくつかあります。

于 2009-07-06T19:40:22.650 に答える