ホームページ  >  記事  >  運用・保守  >  Linux におけるプロセスとは何を意味しますか?

Linux におけるプロセスとは何を意味しますか?

青灯夜游
青灯夜游オリジナル
2021-11-30 16:19:144555ブラウズ

プロセスは、Linux で実行されるプログラムのインスタンスであり、トランザクションを管理するための基本単位です。プロセスには、独自の独立した処理環境とシステム リソースがあります。プロセスのステータスは、プロセスの作成、スケジュール設定、終了などを含めて変化します。

Linux におけるプロセスとは何を意味しますか?

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

プロセスは、Linux で実行されるプログラムのインスタンスです。

Linux システムでは、オペレーティング システムがプロセスを通じてタスクを 1 つずつ完了します。プロセスはトランザクションを管理する基本単位です。プロセスには、独自の独立した処理環境 (現在どの環境変数が必要か、プログラムが実行されているディレクトリはどこか、現在プログラムを実行しているユーザーなど) とシステム リソース (プロセッサの CPU 占有率など) があります。 、メモリ、I /O デバイス、データ、プログラム)。

Linux システムでプログラムを実行すると、システムはプログラム用の特定の環境を作成します。この環境には、システムがプログラムを実行するために必要なものがすべて含まれています。

Linux でコマンドを実行するたびに、新しいプロセスが作成または開始されます。たとえば、コマンド「ls -l」を実行してディレクトリの内容を一覧表示しようとすると、プロセスが開始されます。画面に 2 つの端末ウィンドウが表示されている場合は、同じ端末プログラムを 2 回実行している可能性があり、2 つの端末プロセスが存在します。

各端末ウィンドウはシェルを実行している可能性があり、実行中の各シェルはプロセスです。シェルからコマンドを呼び出すと、対応するプログラムが新しいプロセスで実行され、プログラムのプロセスの実行が完了すると、シェルのプロセスが再開されます。

オペレーティング システムは、PID またはプロセス ID と呼ばれる数値コードを通じてプロセスを追跡します。システム内のすべてのプロセスには一意の PID があります。

ここで例を使用して、Linux のプロセスを理解します。シェル コマンド ラインで次のコマンドを実行します。

$ sleep 10 &
[1] 3324

プログラムは 10 秒待機するため、現在のシェルで sleep という名前のプロセスをすぐに検索します。

$ ps -ef | grep sleep
mozhiyan  3324  5712  cons1  17:11:46  /usr/bin/sleep

A が表示されます。 /usr/bin/sleep という名前のプロセスがシステム上で実行されています (その PID は、前のコマンドで取得した PID と同じです)。

ここで、上記の sleep コマンドを 3 つの異なるターミナル ウィンドウから並行して実行してみます。上記のコマンドの出力は次のようになります:

$ ps -ef | grep sleep
mozhiyan  896   5712  cons1  17:16:51  /usr/bin/sleep
mozhiyan  5924  5712  cons1  17:16:52  /usr/bin/sleep
mozhiyan  2424  5712  cons1  17:16:50  /usr/bin/sleep

それぞれのスリープが表示されます。プログラム インスタンスは別のプロセスとして作成されます。

各 Linux プロセスには別の ID 番号、つまり親プロセスの ID (ppid) があります。システム内のすべてのユーザー プロセスには親プロセスがあります。

コマンド「ps -f」は、プロセスの PID と PPID をリストします。このコマンドの出力は次のようになります。

$ ps -f
   UID     PID   PPID    TTY       STIME      COMMAND
mozhiyan  4124   228    cons0    21:37:09   /usr/bin/ps
mozhiyan   228   1      cons0    21:32:23   /usr/bin/bash

シェル コマンド ライン プロンプトで実行するコマンドはすべて、現在のシェル プロセスを親プロセスとして使用します。たとえば、シェルのコマンド ライン プロンプトで ls コマンドを入力すると、シェルは ls コマンドを実行しますが、このとき、Linux カーネルはシェルのメモリ ページをコピーしてから ls コマンドを実行します。

Unix では、各プロセスは fork メソッドと exec メソッドを使用して作成されます。ただし、このアプローチではシステム リソースが失われます。

Linux では、フォーク メソッドはコピーオンライト メモリ ページを使用して実装されるため、親プロセスのメモリ ページ テーブルをコピーするのに必要な時間とメモリの損失のみが発生し、新しいメモリ ページ テーブルが作成されます。子プロセスのページ テーブル独自のタスク構造。

コピーオンライト モードでは、新しいプロセスの作成時に不必要な構造コピーの作成が回避されます。たとえば、ユーザーがシェル コマンド ライン プロンプトで ls コマンドを出力すると、Linux カーネルはシェルの子プロセスを作成します。つまり、シェル プロセスが親プロセスで、ls コマンド プロセスが子プロセスになります。コマンド プロセスは、同じメモリ ページを使用するこのシェルをポイントし、子プロセスはコピー オン ライト テクノロジを使用して ls コマンドを実行します。

プロセスの状態

各 Linux プロセスには、作成、実行、終了、クリーンアップなどの独自のライフサイクルがあります。各プロセスには、プロセス内で現在何が起こっているかを示す独自のステータスもあります。プロセスのステータスは、プロセスの作成、スケジュール設定、終了などを含めて変化します。

プロセスには次の状態があります:

  • D (中断不可能なスリープ状態) - プロセスはスリープ状態であり、イベントが発生するまで再開できません。

  • R (実行ステータス) - プロセスは実行中です。

  • S (スリープ状態) - プロセスは実行されていませんが、イベントまたはシグナルを待っています。

  • T (停止状態) - プロセスは、信号 SIGINT や SIGSTOP などの信号によって停止されます。

  • Z (ゾンビ状態) - 21eba13340b1d3a525d7480ca5bbd370 とマークされたプロセスはゾンビ プロセスであり、親プロセスが適切に破棄したため残っています。親プロセスが終了すると、これらのプロセスは init プロセスによって破棄されます。

指定したプロセスのステータスを表示するには、次のコマンドを使用できます:

ps -C processName -o pid=,cmd,stat

例:

$ ps -C sleep -o pid=,cmd,stat
      CMD       STAT
9434 sleep 20    S

関連する推奨事項: "Linux ビデオ チュートリアル>>

以上がLinux におけるプロセスとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。