Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linuxプロセスの知識を

Linuxプロセスの知識を

  

Linuxシステム管理者にとって、Linuxプロセスの知識が簡単に混乱することができプロセスとスレッドの一定の理解が必要で紹介し、唯一の完全Linuxプロセスが誤解されることはありません理解し、次の小シリーズでは、Linuxプロセスについて詳しく説明します。

コンピュータが実際にできることは、メモリ内のアドレスを見つけるなど、2つの数の合計を計算するなど、基本的に非常に簡単です。これらの最も基本的なコンピューターの操作は命令と呼ばれます。いわゆるプログラムはそのような一連の命令の集まりです。プログラムを通して、私たちはコンピュータに複雑な操作を完了させることができます。ほとんどの場合、プログラムは実行可能ファイルとして保管されています。このような実行ファイルはレシピのようなもので、そのレシピに従ってコンピュータはおいしい食事を作ることができます。

では、プログラムとプロセスの違いは何ですか?

プロセスはプログラムの具体的な実装です。レシピだけが役に立たない、我々は常にレシピの指示に従い、実際に料理を作るためにそれらを段階的に実行する。処理は、レシピに従って実際に調理する処理と同様に、プログラムを実行する処理である。同じプログラムを複数回実行することができ、そのたびにメモリ内にロードするための別々のスペースが作成され、その結果、複数のプロセスが発生します。異なるプロセスが独自の独立したIOインタフェースを持つこともできます。

オペレーティングシステムの重要な特徴は、我々は、プロセスのための美しいキッチンのための準備ができているかのように、その上のメモリ空間、情報管理プロセス、およびを割り当てるために、例えば、プロセスを容易にすることです。

まず、我々はそのような$ PSは-eoのPID、COMM、CMDとして実行中のプロセスを、照会する$ psコマンドを使用することができます
プロセスを見て、以下の結果を示しています。

(-eフラグすべてのプロセス、-o PID、COMMを一覧表示するために、我々は、PID、コマンドCMD情報を必要とすることを意味CMD)
ログイン

の各行の処理を表します。各行は3列に分かれています。最初の列のPID(プロセスID)は整数で、各プロセスは独自のIDを表すための固有のPIDを持ち、そのPIDに基づいて他のプロセスを識別することもできます。 2番目の列COMMANDは、このプロセスの短縮形です。第3列CMDは、ランタイムに運ばれるプロセスおよびパラメータに対応するプログラムである。

(第3行が一部の中国人がいるとブラケット[]囲まれた。彼らは、カーネル関数の一部であり、オペレーティングシステムを管理するプロセスを容易にするための方法として服を着ている。我々はそれらを考慮していない。)

1行目を見てみましょう。PIDは1、名前はinitです。このプロセスは、/bin /initファイル(プログラム)を実行することによって生成されます。 Linuxが起動されると、initがシステムによって作成された最初のプロセスになりますこのプロセスは、コンピュータをシャットダウンするまで続きます。このプロセスは特に重要であり、これからも言及していきます。

プロセスの作成方法

実際、コンピュータの電源を入れたときに、カーネルはinitプロセスのみを作成します。 Linuxカーネルは、新しいプロセスを直接作成するためのシステムコールを提供しません。残りのプロセスはすべて、forkメカニズムを介してinitプロセスによって作成されます。新しいプロセスは古いプロセス自体によってコピーされます。これがフォークです。フォークはシステムコールです。プロセスは記憶に残っています。各プロセスには、メモリ内の独自のアドレス空間が割り当てられています。プロセスがフォークすると、Linuxは新しいプロセス用に新しいメモリスペースをメモリ内で開き、古いプロセススペースの内容を新しいスペースにコピーします。その後、2つのプロセスが同時に実行されます。

古いプロセスが新しいプロセスの親プロセスになり、それに対応して新しいプロセスが古いプロセスの子プロセスになります。 PIDに加えて、プロセスは、親プロセスPIDを記憶するためのPPID(親PID)を有するであろう。 PPIDに従って追跡を続けると、ソースがinitプロセスであることが常にわかります。したがって、すべてのプロセスもinitをルートとするツリー構造を形成します。

次の、我々は現在のシェルでプロセスを照会:

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

ルート@ vamei:〜#psの-o pidを、PPID、CMD

PID PPID CMDは、私たちが見ることができます。

16935 3101はsudo -i

16939 16935 -bash

23774 16939 PS -o pidを、PPID、CMD


ちなみに、2番目のプロセスbashは1番目のプロセスsudoの子プロセスであり、3番目のプロセスpsは2番目のプロセスの子プロセスです。

$ pstreeはまた、全体のプロセスツリーを表示するには、コマンドを使用することができます。以下のように

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

init─┬─NetworkManager─┬─dhclient

│└ ─2* [{NetworkManagerを}]

├─accounts-daemon───{アカウントデーモン}

├─acpid

├─apache2─┬─apache2< BR>

│└─2* [apache2───26* [{apache2の}]

├─at-SPIバス-laun───2* [{AT-SPIバス-laun}]

├─atd

├─avahi-daemon───avahi-デーモン

├─bluetoothd

├─colord── ─2* [{colord}]

├─console-kit-dae───64* [{console-kit-dae}]

├─cron

├─cupsd───2* [DBUS]

├─2* [dbusの-デーモン]

├─dbus-打ち上げ

├─dconf-service── ─2* [{dconf-service}]

├─dropbox───15* [{dropbox}]

├─firefox───27* [{firefo X}]

├─gconfd-2

├─geoclueマスター

├─6* [ゲッティ]

├─gnome-keyring-
d───7* [{GNOME-キーリング-D}]

├─gnome-terminal─┬─bash

│├─bash───pstree

│├─gnome-PTY-helpe

│├─sh───R───{R}

│└─3* [{GNOME末端}]

forkは通常関数として呼び出されます。この関数は2回戻り、子プロセスのPIDを親プロセスに返し、0が子プロセスに返します。実際、子プロセスは常に自分自身のPPIDを照会してその親プロセスが誰であるかを知ることができるので、1対の親プロセスと子プロセスはいつでも相互に照会できます。

通常、fork関数を呼び出した後、プログラムはif選択構造体を設計します。 PIDは、プロセスが子プロセスであることを示し、0に等しい場合、それはそのようなEXECライブラリ関数(ライブラリ関数)は、別のプログラムファイルを読み取るを使用するなど、特定の命令を実行でき、実際にある(現在のプロセス空間で実行されます私たちはforkの大きな目的を使用します:プログラムのためのプロセスを作成します;そしてPIDが正の整数であるとき、それは親プロセスです、そして次に他の命令を実行します。したがって、子プロセスが確立された後は、親プロセスとは異なる方法で実行できます。

子プロセスを終了する(終了)

場合は、子プロセスの終了、それは(親プロセスに通知して、あなたの記憶を空に占領され、カーネルにその終了情報を残します終了コード、問題なく実行された場合は0、エラーまたは異常な状態が発生した場合は「0」の整数です。このメッセージでは、プロセスが終了した理由を説明しています。親プロセスが、子プロセスが終了したことを認識すると、子プロセスに対してwaitシステムコールを使用します。この待機機能は、子プロセスの終了情報をカーネルから取得し、カーネル内の情報によって占められているスペースをクリアすることができます。ただし、親プロセスが子プロセスより早く終了した場合、子プロセスは孤立プロセスになります。孤立したプロセスはinitプロセスに渡され、initプロセスはプロセスの親プロセスになります。 initプロセスは、子プロセスが終了したときにwait関数を呼び出します。

もちろん、悪いプログラムも子プロセスの終了情報をカーネル内にとどめます(親プロセスは子プロセスのwait関数を呼び出しません)。その場合、子プロセスはゾンビ(ゾンビ)になります。プロセス大量のゾンビプロセスが蓄積すると、メモリ空間が圧迫されます。

プロセスとスレッド

UNIXでは、プロセスとスレッドは2つの関連がありますが異なりますが、Linuxでは、スレッドは単なる特殊なプロセスです。メモリスペースとIOインタフェースは、複数のスレッド間で共有できます。したがって、このプロセスがLinuxプログラムを実装する唯一の方法です。

概要

プログラム、プロセス、PID、メモリスペース

子プロセス、親プロセス、PPID、fork、wait

上記はLinuxプロセスに関連しています。この記事を読むことで、皆さんはLinuxプロセスをより深く理解し、Linuxプロセスを管理することがより簡単になったと思います。

Copyright © Windowsの知識 All Rights Reserved