タグ付けされた質問 「signals」

シグナルは、イベントが発生したプロセスへの通知です。信号は、ソフトウェア割り込みとして説明されることがあります。信号は、プログラムの通常の実行フローを中断するという点でハードウェア割り込みに似ています。ほとんどの場合、信号がいつ到着するかを正確に予測することはできません。これらはC標準で定義され、POSIXで拡張されていますが、他の多くのプログラミング言語/システムでも同様にアクセスできます。

14
何が私のプロセスを殺しましたか、そしてなぜですか?
私のアプリケーションはLinuxのバックグラウンドプロセスとして実行されます。現在、ターミナルウィンドウのコマンドラインから開始されます。 最近、ユーザーがしばらくアプリケーションを実行していて、不思議なことに死にました。テキスト: 殺された ターミナルにいた。これは2回起こりました。別のターミナルの誰かがkillコマンドを使用してプロセスを強制終了したかどうかを尋ねました。番号。 Linuxはどのような状況下でプロセスを強制終了することを決めますか?kill(9)シグナルを受信した後にプロセスが停止したため、シェルが「killed」を表示したと思います。Linuxがkillシグナルを送信した場合、システムログのどこかに、それがkillされた理由を説明するメッセージがありますか?
614 linux  process  kill  signals 

12
PythonでSIGINTをキャプチャするにはどうすればよいですか?
私はいくつかのプロセスとデータベース接続を開始するpythonスクリプトに取り組んでいます。時々、Ctrl+ C信号でスクリプトを強制終了したいので、クリーンアップを行いたいと思います。 Perlではこれを行います。 $SIG{'INT'} = 'exit_gracefully'; sub exit_gracefully { print "Caught ^C \n"; exit (0); } これをPythonでどうやって行うのですか?
535 python  controls  signals 


10
SIGPIPEを防ぐ(または適切に処理する)方法
TCPまたはローカルUNIXソケットでの接続を受け入れ、単純なコマンドを読み取り、コマンドに応じて応答を送信する小さなサーバープログラムがあります。問題は、クライアントがときどき回答に関心を持たずに早く終了する可能性があるため、そのソケットに書き込むとSIGPIPEが発生し、サーバーがクラッシュすることです。ここでクラッシュを防ぐためのベストプラクティスは何ですか?行の反対側がまだ読んでいるかどうかを確認する方法はありますか?(select()は、ソケットが書き込み可能であると常に表示するため、ここでは機能しないようです)。または、ハンドラーでSIGPIPEをキャッチして無視する必要がありますか?
260 c  io  signals  broken-pipe  sigpipe 



9
sigactionとsignalの違いは何ですか?
ここにあるアプリに追加のシグナルハンドラーを追加しようとしていましたが、作成者がsigaction()他のシグナルハンドラーの設定に使用していたことに気付きました。使うつもりsignal()でした。慣習に従うために使用する必要がありますsigaction()が、ゼロから作成する場合、どちらを選択する必要がありますか?
143 c  signals  posix 



2
Linuxでの複数のスレッドによる信号処理
Linuxでは、プログラム(複数のスレッドがある可能性がある)がSIGTERMやSIGHUPなどのシグナルを受信するとどうなりますか? どのスレッドがシグナルをインターセプトしますか?複数のスレッドが同じシグナルを取得できますか?シグナルの処理専用の特別なスレッドはありますか?そうでない場合、シグナルを処理するスレッド内で何が起こりますか?シグナルハンドラルーチンが終了した後、実行はどのように再開されますか?
119 c  linux  multithreading  signals  ipc 


4
AndroidのJNIでSIGSEGV(セグメンテーション違反)をキャッチしてスタックトレースを取得するにはどうすればよいですか?
プロジェクトを新しいAndroid Native Development Kit(JNI)に移動します。SIGSEGVが発生した場合(おそらくSIGILL、SIGABRT、SIGFPEも)、代わりに、素敵なクラッシュレポートダイアログを表示したいのですが。 (または以前に)現在発生していること:プロセスの即時の異常な終了と、OSによるプロセスの再起動の試み。(編集: JVM / Dalvik VMはシグナルをキャッチし、スタックトレースやその他の有用な情報をログに記録します。その情報をメールで送信するオプションをユーザーに提供したいだけです。) 状況は次のとおりです。私が記述していない大量のCコードが、このアプリケーション(すべてのゲームロジック)でほとんどの作業を行います。他の多くのプラットフォームで十分にテストされていますが、Androidで移植すると、ガベージをフィードし、ネイティブコードでクラッシュを引き起こすので、現在Androidログに表示されるクラッシュダンプ(ネイティブとJavaの両方)が必要です(Android以外の状況ではstderrになると思います)。私は自由にCとJavaの両方のコードを変更できますが、コールバック(JNIに出入りするコールバックの両方)の数は約40で、明らかに小さな差分にはボーナスポイントがあります。 J2SEのシグナルチェーンライブラリであるlibjsig.soを聞いたことがあります。Androidにそのようなシグナルハンドラーを安全にインストールできれば、私の疑問の一部を解決できますが、Android / Dalvikにはそのようなライブラリはありません。

16
Windows上のアプリケーションにCtrl-C(SIGINT)を送信できますか?
私は(過去に)書かれたクロスプラットフォーム(Windowsの/ Unixの)コマンドラインから起動、アプリケーションは、ユーザーが入力した扱い持ってCtrl- C(きれいにアプリケーションを終了するIE)と同じ方法で組み合わせを。 Windowsで、別の(無関係の)プロセスからのプロセスに相当するCtrl- C/ SIGINT /を送信して、クリーンに終了するように要求することは可能ですか(リソースを整理する機会を与えるなど)?

7
プロセスを正常にシャットダウンするために、どのような順序でシグナルを送信する必要がありますか?
別の質問のこの回答に対するコメントで、コメント投稿者は次のように述べています。 どうしても必要な場合を除いて、kill-9を使用しないでください。SIGKILLをトラップできないため、強制終了されたプログラムは、一時ファイルを消去するなどのシャットダウンルーチンを実行できません。最初にHUP(1)、次にINT(2)、次にQUIT(3)を試してください。 原則的には同意しますSIGKILLが、残りは私にとってのニュースです。によって送信されるデフォルトのシグナルkillがSIGTERMであるとすると、任意のプロセスを正常にシャットダウンするために最も一般的に期待されるシグナルであると思います。また、SIGHUPデーモンに「構成ファイルを再読み取り」するように指示するなど、終了しない理由で使用されることもあります。そして、SIGINT(Ctrl-Cで通常発生するのと同じ割り込みですよね?)は、本来あるべきほど広くサポートされていないか、かなり不自然に終了しているように思われます。 それSIGKILLが最後の手段であるとすると、可能な限り正常にシャットダウンするために、どのシグナルをどの順序で任意のプロセスに送信する必要がありますか? 可能であれば、(個人的な好みや意見を超えて)裏付けとなる事実や参考文献であなたの答えを実証してください。 注:bash / Cygwinの検討を含むベストプラクティスに特に興味があります。 編集:これまでのところ、INTやQUITについては誰も言及していないようで、HUPについての言及は限られています。これらを整然としたプロセス殺害に含める理由はありますか?

7
シグナルハンドラでprintfを使用しないようにするにはどうすればよいですか?
printfは再入可能ではないため、シグナルハンドラーで使用しても安全ではないはずです。しかし、私はprintfこの方法を使用する多くのサンプルコードを見てきました。 だから私の質問は:printfシグナルハンドラーでの使用を避ける必要があるのはいつですか、そして推奨される代替品はありますか?
86 c  linux  signals 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.