問題タブ [sigqueue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Pythonでリアルタイムシグナル`sigqueue()`を送受信するにはどうすればよいですか?
Pythonはsignals
モジュールとos.kill
;を提供します。sigqueue()
(データが添付されたリアルタイム信号)のための機能はありますか?選択肢は何ですか?
c - ac プログラム (Linux) で sigqueue で送信されたシグナルを受信するにはどうすればよいですか?
ac プログラム (Linux) で sigqueue で送信されたシグナルを受信するにはどうすればよいですか?
kill を使用してシグナルを送信するだけの場合は、次のようなレシーバーを追加するだけです
次のような単純な関数を指します。
しかし、sigqueue でシグナルを送信した場合、どうすればよいでしょうか?
ありがとうヨハン
sigaction を追加します。
sigusr2 は次のようになります。
そして、sigqueueの例を参照するだけです
c++ - gcc で sigqueue の例をビルドできませんが、g++ は問題ありませんか?
奇妙なビルドの問題があります。
別のプロセスに sigqueue を送信する簡単なテスト プログラムがあります。
この小さなコード例は、c++ プログラム (g++ でコンパイル) としてビルドして実行しますが、ac プログラム (gcc で) としてコンパイルすると、sigval 構造体が見つからないというエラーが発生します。
短い例:
この質問を簡単にするために、pid を 0 に置き換えたことに注意してください。
そして、gcc でコンパイルすると、次のようになります。
ここで何が欠けているのですか、なぜ彼は sigval 構造体を見つけられないのですか? そして、なぜg ++はそれを見つけることができるのですか?
ありがとうヨハン
c - siginfoのデータは信頼できますか?
Linuxでは、syscallを自分で呼び出すことで、 andフィールドrt_sigqueue
に好きなものを入力でき、呼び出しが成功して、間違った値が表示されることがわかりました。当然のことながら、信号の送信に対するuidの制限は、この種のなりすましに対するある程度の保護を提供しますが、この情報に依存することは危険である可能性があるのではないかと心配しています。私が読むことができるトピックに関する良いドキュメントはありますか?Linuxが、カーネル空間でパラメーターを生成するのではなく、呼び出し元にパラメーターを指定させるという明らかに誤った動作を許可するのはなぜですか?特に、ユーザースペースでuid / gidを取得するために、追加のsys呼び出し(したがってパフォーマンスコスト)が必要になる可能性があるため、これは無意味に思えます。si_uid
si_pid
siginfo
編集:POSIXの私の読書に基づいて(私によって追加された強調):
si_codeがSI_USERまたはSI_QUEUE、[XSI]、または0以下の任意の値の場合、信号はプロセスによって生成され、si_pidおよびsi_uidはそれぞれ送信者のプロセスIDおよび実際のユーザーIDに設定されます。
Linuxによるこの動作は不適合であり、重大なバグであると思います。
c - sigqueue を使用して char* を別のプロセスに送信できますか
これがクライアントプログラムの私のコードの一部です
これがサーバープログラムの私のハンドラーです
エラーはありませんが、送信したものを取得できません。変なものが印刷されます。
c - プロセスグループにシグナルを送る sigqueue()
fork() でプロセスツリーを作成しています(3子くらい)。kill(-getpgrp(), signal_number) でそれらすべてに簡単にシグナルを送信できますが、sigqueue で同じことを行うにはどうすればよいですか?
sigqueue() 関数はプロセスまたはプロセスのグループにシグナルを送信しますが、kill() とは異なり、pid に負の値を指定してプロセス グループ全体にシグナルを送信するために sigqueue() を使用することはできません。 .
では、それを行う方法は?
編集:
コード:
s1.c は、信号を「キャッチ」して制御するプログラムです。したがって、(同じグループ ID を持つ) s1 のカップルは、sigqueue() からのシグナルを待ちます。
linux - OS X で sigqueue を使用する方法はありますか?
最近、sigqueue が OS X (mac OS Sierra) で動作しないことに気付きました。仮想マシン (linux) を使用しない方法があるかどうか知りたいです。