問題タブ [signal-handling]

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.

0 投票する
2 に答える
183 参照

c - グローバル変数更新時のマスキング信号

ハンドラーの実行時に (sa_mask を使用して) シグナルが発生しないようにマスクできることを認識しています。ただし、いくつかのグローバル変数を更新しているときにシグナルをマスクする方法を知りたいです。

また、特定のユーザー定義関数が実行されているときに信号をマスクする方法を知りたいです。

この2点は可能でしょうか?

どんな助けでも大歓迎です

ありがとう

0 投票する
1 に答える
223 参照

c - 子プロセスからも受信した SIGINT

私は2つのプログラムを持っています(私が書いたものです)。「MAN」と呼ばれる最初のものは、何らかの方法で終了するまでバックグラウンドで実行されるプロセスである「D」(2 番目のもの) を呼び出します。

D を終了せずに MAN を終了したいと思います。

ctrl + c を使用して MAN を終了しようとすると、man が正しく終了します (sigint 信号を傍受しました)。D を実行し続けたいのですが、MAN が CTRL + C を受け取ると、D もそれを受け取ります。

この状況をどのように処理しますか?D のみを実行し、CTRL + C で終了する可能性を維持したいことが重要です。MAN を介して実行すると問題が発生します。MAN のみに到達する必要がある CTRL + C で終了したくありません。

なにか提案を?

0 投票する
2 に答える
2813 参照

c - OpenMP並列プログラムでの信号処理

POSIXタイマー(timer_create())を使用するプログラムがあります。基本的に、プログラムはタイマーを設定し、長い(場合によっては無限の)計算の実行を開始します。タイマーの期限が切れてシグナルハンドラーが呼び出されると、ハンドラーは計算された最高の結果を出力し、プログラムを終了します。

OpenMPを使用して計算を並行して実行することを検討します。これにより、計算が高速化されるはずです。

pthreadには、たとえばスレッドなどのシグナルマスクを設定するための特別な関数があります。OpenMPはそのような制御を提供しますか、それともOpenMPが作成するスレッドのいずれかにシグナルを配信できるという事実を受け入れる必要がありますか?

また、現在コードの並列セクションにいてハンドラーが呼び出された場合でも、アプリケーションを安全に強制終了でき(exit(0);)、OpenMPロックのロックなどを実行できますか?

0 投票する
2 に答える
735 参照

c++ - キューのデータ構造にアクセスするシグナルハンドラー(競合状態?)

私は現在、C++で小さなシェルを書いています。

ジョブとそれに関連付けられたPIDは、ジョブポインタのキューに格納されます(job *)。新しいジョブが実行されると、そのジョブに関する情報がキューに追加されます。複数のジョブを同時に処理でき、シェルのコンソールでいつでも新しいジョブを入力できるため、終了するジョブを待機するシグナルハンドラーがあります。

ジョブが終了したら、その情報をアクティブなジョブキューから削除し、終了したジョブの両端キューに移動する必要があります。ただし、別のジョブが停止したときに、ユーザーの新しいジョブがキューに追加されている可能性があります。

そのような場合、それらのinsertキュー操作は中断され、私のシグナルハンドラーが呼び出され、そのpop操作が実行されます。

このプロセス中に破損が発生する可能性があると想像しているので、この潜在的な競合状態をどのように解決できるかを理解しようとしています。中断された親プロセスがその時点でキューを使用しているとデッドロックが発生するため、ミューテックスを使用できません。

C++11タスクレットに関する情報とともに、ユーザーが宣言したアトミック操作が可能であるという情報がいくつか表示されます。しかし、これらが私の質問に関連しているかどうかはわかりません。

興味深いことに、私が参照として使用しているサンプルシェル(MSH- http://code.google.com/p/mini-shell-msh/)は、そのような条件を処理していないようです。シグナルハンドラは、メインコンソールとともにジョブリストをすぐに変更します。おそらく私がここで見落としているものがありますか?

いつものように、すべてのフィードバックが適用されます。

0 投票する
2 に答える
5571 参照

c - シグナルハンドラから戻る

シグナル ハンドラ関数を正しい方法で終了していませんか? 正常にプログラムに戻らないようです。代わりに、ループに入り、ユーザー入力を待機する必要がある場所で、スキップして「ユーザー入力」の長さを-1に読み取り、エラーを出します。(コードではより意味があります。)

そのため、ctrl+c が入力されると、シグナルをキャッチして処理する必要があります。メインに戻ると、セットアップに入り、読み取り関数を完全にスキップして、長さを -1 に等しくします。これにより、プログラムでエラーが発生します。handle_SIGINT 内のコードは今のところ関係ないと思います。セットアップで読み取り機能をスキップする理由を知っている人はいますか?

0 投票する
2 に答える
4613 参照

c - 複数のシグナルの処理

信号の処理について質問があります。SIGINT シグナルを受信した場合、"Recieved Signal" を出力する必要があると仮定します。10 秒以内にハンドラーが別のシグナルを受信した場合、ハンドラーは "Shutting Down" を出力し、ステータス 1 で終了する必要があります。

私は次のようにコードを作成しました:

dev c++ でコンパイルしようとしましたが、失敗しました。SIGALRM が宣言されていないため (この関数で最初に使用)。

とにかく、私が知りたいのは、このコードが正しいかどうかです。私は実際にはalrmhandler()についてはちょっとわかりません。SIGALRM を無視する必要がありますか?

0 投票する
4 に答える
12392 参照

perl - さまざまな $SIG{CHLD} 値の違いは何ですか?

これらの設定の違いは何ですか?

「UNIX環境での高度なプログラミング 第2版」によると、図10.1のSIGCHLDのデフォルト値は「無視」です。

「無視」が「SIG_IGN」を意味する場合、子供はゾンビになることはなく、そうではありません。

そこからはあまり明確になりません。

プロセスがその性質を明確に SIG_IGN に設定した場合、呼び出しプロセスの子はゾンビ プロセスを生成しません。これは、デフォルトのアクション (SIG_DFL) とは異なることに注意してください。図 10.1 では無視されます。代わりに、終了時に、これらの子プロセスのステータスは破棄されます。

さまざまな値(または未定義の非値)の影響が何であるかを理解するのに苦労しています。これまでの解決策は、目的の動作が得られるまでこれらの選択肢を繰り返し使用することでしたが、各値が信号の動作をどのように定義するかを正確に理解したいと考えています。

動作: 子プロセスが「システム」を呼び出しているか、別の子を作成するバックティックを使用しており、シグナルは通常、間違った (親) ハンドラーによってキャッチされます。ローカル ハンドラーを設定することはできますが、孫からのシグナルで何もしないようにする場合、どの値が最も適切かわかりません。

誰か私を照らしてくれませんか?

更新: ikegami のフィードバックに基づいて、特定のテストを行いました。この動作は、少なくとも部分的にはプラットフォーム固有です。

次のフラグメントを検討してください。

Solaris 10 上の Perl 5.8.6 は、system() 呼び出しの PID に対して「SIGNAL CHLD」メッセージを表示します。些細なことでも何でもする

ローカル $SIG{CHLD};

子でそれらのメッセージを抑制します。

私が試した他のすべてのフレーバーでは、死神は子供を見ることはありません.

0 投票する
2 に答える
28356 参照

python - python: SIGALRM に相当する Windows

私はこのデコレータを持っています:

このコードは Linux でしか機能しませんが、Windows と同様にSIGALRM. このコードを Windows でも機能させる最も簡単な方法は何でしょうか?

0 投票する
4 に答える
3248 参照

c - シグナルハンドラ内の共有データの読み取り

私は、シグナルハンドラー内のバイナリサーチツリー(BST)を読み取る必要がある状況にあります(私の知る限り、スレッドベースごとのSIGSEGVシグナルハンドラー)。BST は、アプリケーション内の他のスレッドによって変更できます。

シグナルハンドラはセマフォやミューテックスなどを使用できないため、共有データにアクセスできません。この問題を解決するにはどうすればよいですか? 私のアプリケーションはマルチスレッドで、マルチコア システムで実行されていることに注意してください。

0 投票する
2 に答える
4112 参照

c - 非同期安全性を構成するもの

シグナル ハンドラー内では、非同期セーフ関数のみを呼び出す必要があると言われています。私の質問は、非同期安全性を構成するものは何ですか? 再入可能スレッドセーフな関数は非同期セーフだと思いますか? それともいいえ?