問題タブ [sigprocmask]
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.
c - sigprocmask() の Set と Oldset
の使い方がよくわかりませんsigprocmask()
。特に、set
andoldset
とその構文がどのように機能し、どのように使用するかについて説明します。
例を挙げて説明してください。ブロックするには、SIGUSR1 を数秒間言ってから、ブロックを解除して処理します。
linux - sigprocmask() causing segfault
Are there any well known reasons for sigprocmask() to segfault when used in a multithreaded application?
I have an application that creates multiple threads using clone(). I have determined that for some reason when I use sigprocmask it segfaults (not all the time though). From the backtrace() it also seems like the segfault is occuring when I use sigprocmask() after a siglongjmp().
Any ideas?
linux - sigprocmaskが機能しない
私は次のようにsigprocmaskを使用しています:
驚いたことに、大きなリストを出力する関数は、最初にmask()を呼び出したとしても、シグナルによって何らかの形で中断されます。私の関数は他の関数を呼び出さないため、マスクが失敗したように見えます。したがって、実行中にunmask()が発生することはありません。sigprocmaskが失敗する原因は何ですか?
c - UNIX でシグナルをブロックする sigprocmask( )
私は小さなコードを書きました。このコードは、最初に {SIGSEGV} をブロックし、次に SIGRTMIN を同じセットに追加します。最終的なシグナル セットは {SIGSEGV,SIGRTMIN} です。したがって、SIG_UNBLOCK を使用する場合、私の理解では、最初に SIGRTMIN のブロックを解除し、次に SIG_UNBLOCK を呼び出すと、SIGSEGV のブロックを解除する必要があります。
つまり、1) {SIGSEGV,SIGRTMIN} 2) SIG_UNBLOCK = SIGRTMIN のブロックを解除します。3) SIG_UNBLOCK を再度呼び出します = SIGSEGV のブロックを解除します。プロセスに SIGRTMIN のみを与えているため、2 回目のブロック解除は SIGRTMIN でプロセスを停止する必要があります。そうではありません。助けてください。 注意: sigprocmask( ) に関する他の質問の回答へのリンクを提供しないでください。私はそれらを見ましたが、私の質問を明確にしていません。
}
linux - sigprocmask により、メイン プロセスが停止する
sigprocmask fn を使用するマルチスレッド コードがあります。この呼び出しの使用は、マルチスレッド プログラムでは指定されていないことがわかっているので、この呼び出しを削除します。ただし、私が直面している問題は、この関数が呼び出されるとメイン スレッドが停止することです。なぜこれが起こるのか理解したい。この関数の呼び出しがコメント化されている場合、メイン スレッドは正常に実行されます。
Init 中の私のメイン プログラムでは、いくつかのスレッド プールが作成されます。その後、InitModule fn が呼び出される TestFunction 関数を呼び出します。InitModule では、sigprocmask が呼び出され、その他の初期化が行われます。その後、関数は TestFunction に戻ります。これが行き詰まるところです。
使い方は以下の通り
InitModule から sigprocmask() 呼び出しを削除すると、"DoSomethingElse done" が出力されます。sigprocmask を使用するとスレッドがスタックするのはなぜですか?
この fn を呼び出した後の InitModule の残りのコードは常に実行されることに注意してください。呼び出し元の関数に戻ったときにのみ、スタックします。
c++ - シグナル実行中の sigprocmask
私は現在、コードの重要なセグメントが実行されているときにsigprocmask
特定のシグナル (この場合はSIGALRM
と) をブロックするために を使用することを研究しています。SIGCHLD
これらのシグナルに関連付けられた両方のシグナル ハンドラーは、中央のデータ構造にアクセスして変更するため、メイン プロセスが処理している間は、これらのシグナル ハンドラーがデータ構造にアクセスできないようにすることが重要です。
現時点では、コードのクリティカル セクションの開始時にこれらのシグナルを単純に無効にし、最後に再度有効にする予定です。
ただし、ブロックされるシグナルのシグナルハンドラも を呼び出しますcriticalFunction
。sigprocmask
関数を呼び出して独自のシグナルでブロッキングを有効にするとどうなるでしょうか? それらは停止しますか、それとも実行を続けますか? (またはいくつかの 3 番目の条件..)
これについて私が見つけることができた唯一のメモは次のとおりです。
sigprocmask() がシグナルハンドラーで呼び出された場合、ハンドラーから戻ると、元の保留中のシグナルマスクを復元することにより、sigprocmask() の作業が取り消される場合があります。( http://www.mkssoftware.com/docs/man3/sigprocmask.3.asp )
(これは私の前の質問へのフォローアップの質問です:キューのデータ構造にアクセスするシグナルハンドラー (競合状態?) )
c - Cでシグナルをブロックするには?
シグナル SIGUSR1 をブロックし、シグナルのブロックを解除するプログラムを作成しようとしています。途中で、 を使用して信号がブロックされていることを確認したいと思いsigpending
ます。しかし、信号はブロックされていないと常に表示され、ブロックされているはずの信号を使用できます。これは私が持っているコードです。
誰でも私を助けることができますか?
c - OS X sigaction が sa_mask を誤って設定する
Macbook (OSX 10.9.5 (13F34)) では、次の簡単なプログラム:
不思議なことに次のように表示されます:
sa_mask
のメンバーが で与えられたosa
ように一致することを期待します。mask
sigprocmask
POSIX はこのフィールドの要件を指定していますか? SIGKILL
マンページでの唯一の言及は、その値が指定されていないのようなブロックできないシグナルに関するものです。
Linux では、このプログラムは以下を出力します。
予想通り。
gcc のバージョンは次のとおりです。
バイナリは以下に対してリンクされています。