web-dev-qa-db-ja.com

GNU Linux(Arch Linux))のSIGINFOがありません

私はアプリケーションを開発していますが、必要に応じていくつかのランタイム統計をコンソールに出力したいと考えています。 killと信号がすぐに思い浮かびました。

Wikiで nixシグナル を読むと、SIGINFOは次の理由で進む方法のように見えます。

  • これらの目的のために意図されています
  • シグナルハンドラーが実装されていない場合はプロセスを終了しません(SIGUSRxとは逆-参照 ここ

ただし、kill -lの出力を調べると、サーバーにこの信号が実装されていないようです。

私の質問は:

  1. システムにSIGINFOがないのはなぜですか?すべてのGNU Linuxシステムに存在しませんか?
  2. この信号を有効にする簡単な(つまり、カーネル/ glibc再コンパイルなし)方法はありますか?ない場合、難しい方法は何ですか?
  3. ターゲットプロセスで処理されない場合に副作用を引き起こさない副作用を目的として使用できる代替シグナルは何ですか? (glibcのマニュアルで他の適切な信号を見つけることができなかったので、私はすでに何も想定していません)

Linuxメタ情報:

Linux whatever 3.18.2-2-Arch #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

更新:この信号がBSD以外のシステムから条件付きで除外される理由について、私はまだ詳細を探しています(以下のコメントを参照)。シグナルは多くの目的に非常に役立つようですので、それが単なる気まぐれの問題であると私が信じるのは難しいです-このシグナルがLinuxで利用できる本当のショートッパーは何ですか?

12
Robert Rossmann

これを追加する話が(linux 0.x-1.x時代に)ありましたが(BSDシステムで有用だったため)、私が正しく思い出せば、当時はBSDよりもLinuxで正しく実行するのが難しい理由がありました。 。

あなたが求めているのは機能のほんの一部にすぎないことに注意してください(つまり、あなたはstty info control-Tのエントリにより、カーネルはSIGINFOttyのプロセスグループに配信します)-その部分は「簡単」ですが、カーネルにプロセスステータスに関する情報を報告させる- しない信号を処理します(それをサポートするものはほとんどなかったため、機能は主に「このプロセスが回転しているかハングしているか」と「とにかくそれがどのプロセスであるか」に関するものでした)が難しい-ISTRその情報を正確に表示すること、およびそれをセキュアアテンションキーパスに関連付ける必要があるかどうかについて、セキュリティ/信頼の問題さえあります。とはいえ、信号を送信するだけの「簡単な」バージョンには何らかの価値があるかもしれません...

(個人的な記憶から。クイックWeb検索では明らかなことは何も見つかりませんが、ディスカッションを見つけるにはreally古いアーカイブを掘り下げる必要があると思います。)

4
eichin

あなたの質問について1):

Arch Linuxシステムのman 7 signalから:

[〜#〜] siginfo [〜#〜] 29、-、-同義語[〜#〜] sigpwr [〜#〜]

(信号29は[〜#〜] siginfo [〜#〜]/[〜#〜] sigpwr [〜#〜]アルファでは[ 〜#〜] siglost [〜#〜] sparcで。)

[〜#〜] sigpwr [〜#〜](POSIX.1-2001では指定されていない)は、通常、他のUNIXシステムではデフォルトで無視されます。

この定義では、SIGINFOはalphaまたはsparcアーキテクチャでのみ使用できます。

1
Guido