Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linuxシグナル機構についての簡単な紹介

Linuxシグナル機構についての簡単な紹介

  

Linuxシグナル機構とは何か、Linuxシグナル機構について説明するのはそれほど単純ではない、この記事ではLinuxシグナル機構の基本について説明します。Linuxシグナル機構についてある程度理解してください。起きて勉強しなさい。

Linuxの基本的なプロセスは、プログラムを実行するためのユニットを処理するための記事、Linuxの中で言及されています。私たちはコンピュータを建物と見なすことができ、カーネルは建物の管理者であり、プロセスは建物のテナントです。各プロセスは別々の部屋(プロセスに属するメモリスペース)を持ち、各部屋はプロセスの外側に入ることはできません。このようにして、各プロセスは、他のプロセスに関係なく、実行していることに焦点を合わせ、他のプロセスが部屋の中に見えないようにします。これは各プロセスの保護メカニズムです。 (何百ものプロセスが常に互いに干渉し合っているか、混乱しているか、または何百ものプロセスが互いを覗いていると想像してみてください。)

プロセスと情報を交換するため。たとえば、カーネルは壁にプロセスがある(ハードウェアエラー)ことを発見しました、そしてプロセスはこれが建物全体を台無しにし続けることを知っている必要があります。別の例として、私たちは複数のプロセスにまたがって協力したいと思います。このように、私達はコミュニケーションのある方法を必要とします。シグナルはプロセスに情報を渡す方法です。建物の管理者が部屋のメールボックスに小さなメモを詰め込んでいると信号を考えることができます。その後、小さなメモを取り出し、メモの内容に応じて特定のアクションを実行します(たとえば、ランプが壊れているため、フラッシュライトを使用するようにプロセスに通知されます)。 (もちろん、あなたはこのメモを完全に無視することができますが、火事のような緊急事態では、信号を無視することは良い選択ではありません)。他のプロセス間通信方式(パイプ、共有メモリなど)と比べて、シグナルが渡すことができる情報は大まかで、単なる整数です。しかし、送信される情報量が少ないため、信号の管理や使用も簡単です。そのため、シグナルは、通知プロセスの終了、一時停止または回復などのシステム管理関連のタスクによく使用されます。

シグナルを送ってください。

シグナルはカーネルによって管理されています。ハードウェアエラー(分母が0の除算、セグメンテーションフォルトなど)など、カーネル自体がシグナルを生成することができますカーネルはプロセスに通知する必要がありますが、他のプロセスも生成できます。 、カーネルに送信され、カーネルによってターゲットプロセスに渡されます。関連情報(部屋のメールボックス)を格納するための各プロセス用のテーブルがカーネルにあります。カーネルがプロセスにシグナルを渡す必要があるとき、プロセスの対応するテーブルの適切な位置に(ストリップに接続された)シグナルを書き込み、そしてシグナルが生成されます。プロセスがシステムコールを実行したとき、システムコールが完了した後にカーネルが終了したとき、メールボックス内の情報はチェックされます。シグナルがある場合、プロセスはシグナルアクション(シグナル処理とも呼ばれます)を実行します。これは配信シグナルと呼ばれます。信号が生成されてから送信されるまでの間、信号は保留状態になっています(ストリップはまだ表示されていません)。生成されたプロセスに特定のシグナルをブロックさせる、つまりプロセスがシグナルのブロックを解除するか無視するまでこれらのシグナルを待機状態にするプログラムを設計することもできます。

共通のシグナル

シグナルによって渡される各整数には特別な意味があり、整数に対応するシグナル名を持ちます。一般的なシグナルは、SIGINT、SIGQUIT、SIGCONT、SIGTSTP、SIGALRMなどです。これらはシグナルの名前です。

コードは、次のように使用します。

$ man 7 signal


上記のシグナルの中で、

SIGINTキーボードがCtrl + Cを押してシェルからシグナルを送信すると、そのシグナルはシェル内のフォアグラウンドで実行中のプロセスに渡されます。割り込み(INTERRUPT)プロセス。

SIGQUITキーボードがシェルからのシグナルを送るためにCTRL + \\を押すと、シグナルはシェルのフォアグラウンドで実行中のプロセスに渡されます対応するシグナルのデフォルトの動作はプロセスを終了する(QUIT)ことです。

SIGTSTPキーボードがCtrl + Zを押してシェルからシグナルを送ると、そのシグナルはシェルのフォアグラウンドで実行中のプロセスに渡され、対応するシグナルのデフォルトのアクションはプロセスを停止することです。

SIGCONTは、中断されたプロセスに続行を通知するために使用されます。

SIGALRMは通常、プログラムが一定時間経過してシグナルを生成した後にタイマーとして機能します。

シェルでシグナルを使用する

実際にシグナルを適用しましょう。シェルでpingを実行します。

コードは次のとおりです。

$ ping localhost

この時点で、Ctrl + ZでプロセスにSIGTSTPを渡すことができます。シェルは次のように表示します。

コードは次のとおりです。

[1] + ping localhostの停止

pingプロセスのPIDを問い合わせるのに$ psを使います(PIDはpingプロセスの部屋番号です)。 )、私のマシンでは27397です。

シェルで$ killコマンドを使用してプロセスに通知することができます。

コードは次のとおりです。

$ kill - SIGCONT 27397

SIGCONTシグナルをpingプロセスに渡します。

シグナル配置

上記の例では、すべてのシグナルが対応するシグナルのデフォルトのアクションを実行します。しかし、これは絶対的なものではありません。プロセスがシグナルを実行すると決定した場合、いくつかの可能性があります。

1)シグナルを無視(無視)し、シグナルはクリアされます。プロセス自体は特別な操作を行いません。デフォルト)操作。各信号は特定のデフォルト操作に対応します。たとえば、上記のSIGCONTはプロセスを続行するために使用されます。

3)操作をカスタマイズします。キャッチシグナルとも呼ばれます。実行プロセスで事前設定されているシグナルに対応する操作。

プロセスのプログラム設計に応じて、プロセスはどのような操作を実行します。特に信号取得の場合、プログラムはいくつかの長くて複雑な操作をセットアップする傾向があります(通常これらの操作を関数に入れます)。

シグナルはシステム管理によく使用されるため、その内容は非常に複雑です。シグナルを深く理解するには、Linux環境プログラミングに関する一定の知識が必要です。

概要

シグナルメカニズム;生成、配信、保留、ブロック

シグナルアクション/シグナル;無視、デフォルトアクション、シグナルのキャッチ

$ kill < Br>

以上がLinuxのシグナルメカニズムの紹介ですが、Linuxのシグナルメカニズムは想像よりはるかに複雑で、数ページについて話すのは困難です。理解する

Copyright © Windowsの知識 All Rights Reserved