2011-12-27 19 views
0

私は、OS-9(マイクロウェア)コードをLinuxに移植するプロジェクトに取り組んでいます。移植OS-9シグナルハンドラ

OS-9の信号処理機能を使用すると、独自の信号を作成したり、少なくとも実装方法(intercept()関数)を作成することができます。私はLinuxのシグナルについてはあまりよく知らないし、私が進むにつれて自分自身を教えようとしている。私はsigusr1とsigactionルートを持っているだけで、身近になれるようになっています。レガシーOS-9コードには、ユーザー定義の信号が10個あります。これをLinuxで実現するにはどうすればよいでしょうか?

OS-9シグナルハンドラは、大きなswitch文を持つ関数です。各シグナルは、そのプロセスコード内の他の場所で動作するグローバル変数に対応(設定)されます。

おかげで、 セス

答えて

2

あなたがSIGRTMINとSIGRTMAX間のシグナル番号を使用する必要があります。 これは議論されているhere

kill(データがない場合)またはsigqueue(データがある場合)を使用して信号を送信します。

あなたはsigactionであなたのシグナルを受け取ります。 sigactionのマニュアルページを見て、sigqueueのデータをどこに保存するかを調べてください。

+0

また、 'sigqueue()'を使って、異なるセマンティクスを、 'SIGUSR1'のような一つのシグナルに、指定された整数を使って区別することができます。 – caf

+0

ありがとう、それはうまくいくようです。しかし、プロセスグループの設定が間違っていないかぎり、-1(グループ全体にシグナルを送る)はkillと同じように動作しないようです。 – Seth