Linuxシステムにおけるプロセス管理の詳細な説明

Linuxシステムにおけるプロセス管理の詳細な説明

1. プロセスとスレッドの概念

出典: Baidu 百科事典:

プロセスとは、コンピュータ内のプログラムが特定のデータ セットに対して行う操作です。システム内のリソース割り当てとスケジュールの基本単位であり、オペレーティング システム構造の基礎となります。 現代のスレッド指向のコンピュータ アーキテクチャでは、プロセスはスレッドのコンテナーです。プログラムは、命令、データ、およびそれらの構成形式の記述であり、プロセスはプログラムの実体です。これは、特定のデータ セットに対するコンピューターのプログラムの操作です。システムのリソース割り当てとスケジュールの基本単位であり、オペレーティング システム構造の基礎です。プログラムは、命令、データ、およびそれらの構成形式の記述であり、プロセスはプログラムの実体です。

スレッドは、オペレーティング システムが操作をスケジュールできる最小単位です。これはプロセス内に含まれており、プロセスの実際の操作単位です。スレッドとは、プロセス内の単一の連続した制御フローを指します。プロセス内で複数のスレッドを同時に実行することができ、各スレッドは異なるタスクを並行して実行します。

2. プロセス管理とは何ですか?

プロセスとは正確には何でしょうか?

プロセスとは、実行中のプログラムまたはコマンドです。各プロセスは実行中のエンティティであり、独自のアドレス空間を持ち、特定のシステム リソースを占有します。

ではプログラムとは何でしょうか?
プログラムとは、特定の目標を達成したり、特定の問題を解決したりするために、人間がコンピューター言語を使用して記述したコードの集合です。

別の言い方をしましょう:

プログラムとは、特定の機能を実現できる、人間がコンピューター言語で記述した実行可能コードの集合です。プロセスとは現在実行中のプログラムです。プログラムが実行されると、実行者の権限と属性、およびプログラム コードがメモリにロードされます。オペレーティング システムはプロセスに ID 番号を割り当てます。これを PID (プロセス ID) と呼びます。

3. プロセス管理の役割

サーバーの健全性状態を判断する: 運用保守エンジニアの主な仕事は、サーバーの安全で安定した動作を確保することです。理想的な状況は、サーバー上で問題が発生した場合、サーバーがクラッシュしたりサービスが停止したりする前に、人間の介入によって問題を解決できることです。プロセス管理の主なタスクは、サーバーが現在正常に動作しているかどうか、および人間の介入が必要かどうかを判断することです。サーバーの CPU 使用率とメモリ使用量が高すぎる場合、問題を解決するには人による介入が必要になります。

システム内のすべてのプロセスを表示する: システム内で実行中のすべてのプロセスを表示する必要があります。これらのプロセスを通じて、システム内でどのサービスが実行されているか、また不正なサービスが実行されているかどうかを確認できます。

プロセスの強制終了: これは、プロセス管理で最も一般的に使用されない方法です。サービスを停止する必要がある場合は、コマンドを適切にシャットダウンして停止します (たとえば、 apacheサービスは、 service httpd stopでシャットダウンできます)。プロセスを終了する正しい方法が失敗した場合にのみ、 killコマンドを使用してプロセスを終了させることを検討します (あなたはキラーではないので、kill を使用してすべてのプロセスを終了しないでください。そうしないと、サーバーが簡単にクラッシュします)

4. Linuxプロセスのさまざまな状態

D : 復帰できないスリープ状態。通常はI/O状況で使用されます。

R : プロセスは実行中です。

S : プロセスはスリープ モードにあり、起動できます。

T : 停止状態。バックグラウンドで一時停止されているか、プロセスがデバッグ状態にある可能性があります。

W : メモリ相互作用状態 (2.6 カーネル以降では無効)。

X : デッドプロセス(表示されないはずです)。

Z : ゾンビプロセス。プロセスは終了しましたが、その一部はまだメモリ内に残っています。

< : 優先度が高い (次のステータスは BSD 形式で表示されます)。

N : 優先度が低い。

L : メモリにロックされました。

s : サブプロセスを含めます。

l : マルチスレッド(小文字の L)。

+ : バックグラウンドで。

5. プロセスとスレッドの関係

(1)スレッドとプロセスの関係

たとえば、コンピューターは同時に 200 個のプロセスを実行しています。

スレッドとプロセスの概念: 各プロセスには少なくとも 1 つのスレッドが含まれており、これらのスレッドはプロセスのリソース空間を共有しています。スレッドが変更されると、CPU 実行プロセスのみが変更され、プロセスが所有するリソースは変更されません。同様に、プログラムには少なくとも 1 つのプロセスが含まれます。プロセス内で操作を実行するための最小単位であり、プロセッサ スケジューリングを実行するための基本単位でもあります。各プロセスには、独自のアドレス空間と、メモリ、I/O、CPU などのリソースがあります。同じプロセス内のスレッドは、プロセスのアドレス空間を共有します。では、他のプロセスのアドレス空間を使用できるのでしょうか。もちろん、これは許可されていません。プロセスは独立しているため、プロセスがクラッシュしても、保護モードの他のプロセスには影響しません。システムにおけるリソース割り当ての基本単位、操作スケジュールの基本単位、同時実行の単位。

同じプロセス内の 2 つのスケジューリングを比較すると、スレッドの切り替えによってプロセスの切り替えは発生しません。
あるプロセスのスレッドが別のスレッドのプロセスに切り替わると、プロセス切り替えが発生します。同時実行プロセスは同時に実行でき、プロセス内のスレッドも同時に実行できます。所有されているリソース 一般的に、スレッドは独自のリソースを所有しませんが、独自のプロセス内のリソースにアクセスできます。たとえば、プロセスによって開かれたファイルは、プロセス内の他のスレッドによって共有される可能性があります。

(2)まとめ

簡単にまとめてみましょう:

プロセス: システムで実行されているアプリケーションを指します。プログラムが実行されると、プロセスになります。プロセスは、リソース割り当ての最小単位です。スレッド: システムによってプロセッサ時間リソースを割り当てるための基本単位、またはプロセス内で独立して実行される単位実行フロー。スレッドは、プログラム実行の最小単位です。

Linux システムにおけるプロセス管理の詳細な説明に関するこの記事はこれで終わりです。Linux プロセス管理に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linuxの運用と保守、基本的なプロセス管理、リアルタイム監視と制御
  • Linuxの運用と保守の基本プロセス管理と環境構成分析
  • Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル

<<:  単一選択折りたたみメニュー機能を実現するCSS

>>:  実務経験7年のフロントエンドスーパーバイザーによる経験共有

推薦する

Linux (Ubuntu 18.04) に Anaconda をインストールする詳細な手順

Anaconda は、大規模なデータ処理、予測分析、科学計算のための最も人気のある Python デ...

Docker ログが多すぎてディスクがいっぱいになる場合の対処方法

複数の Docker コンテナがデプロイされたサーバーがあり、各 Docker コンテナが stde...

CentOS 7 に Percona Server+MySQL をインストールする

1. 環境の説明(1) CentOS-7-x86_64、カーネルバージョン uname -r は、 ...

MAC 上の MySQL の初期パスワードを忘れた場合の対処方法

MACでMySQLの初期パスワードを忘れた問題を解決する方法を参考までに共有します。具体的な内容は次...

オブジェクトのプロパティを反復処理する際の TypeScript の問題

目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...

Jenkins統合Dockerプラグインの問題を解決するいくつかの方法

目次背景質問1エラー 2エラー 3エラー4要約する背景テスト環境では、docker プラグインを統合...

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

PostgreSQL マテリアライズドビュープロセス分析

この記事は主にPostgreSQLマテリアライズドビューのプロセス分析について紹介します。サンプルコ...

Vue+swiperでタイムライン効果を実現

この記事では、タイムライン効果を実現するためのvue+swiperの具体的なコードを参考までに共有し...

Vue2.0でデータの双方向バインディング機能をjsを使って実装する

Object.definePropertyの理解文法:オブジェクト.defineProperty(o...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー

OS X 環境で MySQL を起動すると、エラー メッセージが表示されます。 016-03-03T...

仮想マシンの複製に関するVirtual Boxチュートリアル図

VMに慣れた後、BOXに切り替えるのは少し異なります。たとえば、コピーネットワークカードを2枚使って...

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...

MySQL データをエクスポートする際の secure-file-priv 問題の解決方法

エラー 1290 (HY000) : MySQL サーバーは –secure-file-priv オ...