プロセスが受信プロセスによって取得できるシグナルとともにペイロードを送信できるようにするにはどうすればよいですか?sigactionによるペイロードの送信
答えて
によって書かれたパイプ、。
sigaction()
を使用してハンドラをインストールする場合は、SA_SIGINFO
フラグを使用して、次のシグネチャが有効になります(標準信号はキューに入れられないため、ほぼ同時に2つの信号が送信されます)。信号はsigqueue()
を使用して送信されると、ハンドラは
void signal_handler(int signum, siginfo_t *info, void *context)
、3番目のパラメータはタイプunion sigval
の組合に格納され、ポインタまたはINTです。 (union sigval value
のために、int型はvalue.sival_int
で、ポインタがvalue.sival_ptr
あるLinuxでは、あなたはvalue.sival_ptr = (void *)(unsigned long)yourval;
を使用して、フルlong
またはunsigned long
を送ることができます。。)
(Linuxの場合、sizeof (long) == sizeof (void *)
ので、あなたは、実際に情報のCHAR_BIT*sizeof (long)
ビットを送信することができます。 ハンドラは、sigqueue()
を使用して信号が送信されたかどうかを、info->si_code == SI_QUEUE
にチェックすることで判断できます。これは、32ビットアーキテクチャでは32、64ビットアーキテクチャでは64です。ペイロードは info->si_value
ユニオンで利用可能です。送信者がポインタまたはintを送信したかどうかを知ることはできませんので、事前にそれを知る必要があります。 sigaction()
のマニュアルページには、si_code
を含むすべてのフィールドが記載されています。
約->si_int
,->si_ptr
および->si_value
を混同しないでください。 siginfo_t
構造は、メンバーsi_int
およびsi_value.sival_int
が全く同じint
を参照し、si_ptr
およびsi_value.sival_ptr
が正確に同じptr
を参照するように定義されています。下位互換性のためにこれらのフィールドにいくつかの余分な "名前"があります。
高負荷時にリアルタイム信号が失われる可能性があることに注意してください。しかし、我々は通常、サービスデーモンに設定や終了をリロードするように指示するために、HUP
またはTERM
のようなシグナルを使用します。同様の管理目的のため、および情報(重要なメッセージとは対照的に)のために、シグナルとそのペイロードを使用することは大丈夫です。
信号は、プロセス間で過度のデータを渡すためのものではありません。パイプ、ソケットなどの別のIPCメカニズムを検討してください。
代わりに、それらを併用することもできます。例えば。プロセス間のパイプの両端を共有し、プロセスAで何かを書き込んだ後、プロセスBにシグナルを送ります。プロセスBへのシグナルの配信はパイプからの読み込み準備として扱われ、プロセスBは信号がキューイングされているように、あなたは、リアルタイム信号(SIGRTMAX-0
からSIGRTMIN+0
)を使用して、あなたは1を見逃すはるかに少ないチャンスを持っているA.
- 1. 角1ポストで空のペイロードを送信
- 2. リクエストパイロットを使用してペイロードを送信
- 3. paho.mqttペイロードを誰に送信したかを知る
- 4. cURLを使用してペイロードをURLに送信する方法
- 5. C:uint16_tを送信者のペイロードに追加して受信者に再度返すようにする
- 6. POST用のペイロードをJSON形式で送信する方法
- 7. ガーキンステップでペイロードとヘッダーパラメータを送信する方法
- 8. Jettyクライアント:大きなペイロードでリクエストを送信する
- 9. sigactionシステムコール
- 10. wso2 esb障害シーケンスからペイロードを送信
- 11. プッシュ・トゥ・クロムと暗号化ペイロード・データをPHPで送信
- 12. SCEPペイロードの後にどのような応答をデバイスに送信する必要がありますか?
- 13. Ember 2.8 Rails 4.2.4:Railsはemberによって送信されたペイロードを受信していません
- 14. ActionCableの加入コールバックで初期ペイロードをクライアントに送信するにはどうすればよいですか?
- 15. urlfetchappでペイロードに配列を含む投稿要求を送信する方法
- 16. Webプラグインを使用してJSONペイロードをRabbitMQに送信するにはどうすればよいですか?
- 17. throw、catch、sigaction macosx
- 18. sigaction機能について
- 19. slack files.upload - javascript/jQueryからペイロードとしてファイルを送信する方法
- 20. Sigactionの使用と解釈
- 21. Ajaxによるデータ、クラス、メソッドの送信
- 22. スパークスタンドアローンモード:プログラムによるジョブの送信
- 23. 統一エンジンによるSMSの送信?
- 24. プログラムによるポストバックの送信
- 25. インテントによるカスタムArrayListの送信
- 26. Anypoint Studio転送ペイロードをHTTPサービス
- 27. 送信フォームのデータを送信者のメールアドレスに送信
- 28. バインドされたsigactionハンドラ
- 29. Azure通知ハブを搭載したWindows 10(モバイル)デバイスにプッシュ通知を送信するためのペイロード
- 30. AFNetworkingによるサーバー送信イベント