Linuxの運用と保守の基本プロセス管理と環境構成分析

Linuxの運用と保守の基本プロセス管理と環境構成分析

1. プロセスの基本的な概要

プロセスとは、開始された実行可能プログラムの実行中のインスタンスです。

/proc ディレクトリの下の数字で名前が付けられたディレクトリはそれぞれプロセスを表し、プロセスの属性情報を格納します。

各プロセスのPIDは一意です。プロセスが終了したとしても、他のプロセスがそのPIDを占有することはありません。

2. プロセスの構成要素

  • 割り当てられたメモリのアドレス空間
  • 所有権の資格情報や権限などのセキュリティ属性
  • プログラムコードの実行スレッドは1つ以上
  • プロセスステータス

3. プロセス環境

  • ローカル変数とグローバル変数
  • 現在のスケジュールコンテキスト
  • ファイル記述子やネットワークポートなどの割り当てられたシステムリソース

4. プロセスステータス

ロゴカーネル定義の状態名と説明
R TASK_RUNNING: プロセスは CPU 上で実行中、または実行を待機中です。実行中(または実行可能)状態の場合、プロセスはユーザールーチンまたはカーネルルーチン(システムコール)を実行しているか、キューに登録されて実行準備が整っている可能性があります。
TASK_INTERRUPTIBLE: プロセスはスリープ状態にあり、ハードウェア要求、システム リソース アクセス、またはシグナルなどの条件を待機しています。イベントまたはシグナルがこの条件を満たすと、プロセスは実行状態に戻ります。
TASK_UNINTERRUPTIBLE: このプロセスもスリープ状態ですが、S 状態とは異なり、送信されたシグナルに応答しません。プロセスの中断により予期しないデバイス状態が発生する可能性がある特定の条件下でのみ使用してください。
TASK_KILLABLE: プロセスはスリープ状態です。これは割り込み不可能な D 状態と同じですが、シグナルに応答して待機中のタスクを割り込み (完全に終了) できるように変更されています。ユーティリティは通常、割り込み可能なプロセスを D 状態として表示します。
T TASK_STOPPED: プロセスは、通常、ユーザーまたは別のプロセスからのシグナルによって停止 (一時停止) されました。プロセスは別のシグナルによって実行状態に戻り、実行を継続できる(回復)
T TASK_TRACED: デバッグ中のプロセスも一時的に停止され、同じTステータスフラグを共有します。
EXIT_ZOMBIE: 子プロセスは終了時に親プロセスに信号を送ります。プロセスID(PID)以外のすべてのリソースが解放されます
バツEXIT_DEAD: 親プロセスが残りの子プロセス構造をクリーンアップ (取得) すると、プロセスは正常に解放されます。このステータスはプロセス一覧ユーティリティでは表示されません。
<優先度の高いプロセス
いいえ優先度の低いプロセス
+フォアグラウンドプロセスグループ内のプロセス
lマルチスレッドプロセス
sセッションプロセスヘッドプロセス

5. プロセスの優先順位

  • <0-139>: 数字が小さいほど優先度が高くなります。
  • <0-99>: リアルタイム優先度、カーネル調整
  • <100-139>: 静的優先度、ユーザー制御可能

6. プロセス管理コマンド

psコマンドは、現在のプロセスを一覧表示するために使用されます。詳細なプロセス情報を表示できます

[root@localhost ~]# ps -e
    PID TTY 時間 コマンド
      1 ? 00:00:02 システム
      2 ? 00:00:00 kthreadd


[root@localhost ~]# ps aux
ユーザー PID %CPU %MEM VSZ RSS TTY STAT 開始時刻 コマンド
ルート 1 0.0 0.6 179032 13504 ? Ss Nov03 0:02 /usr/lib/syst
ルート 2 0.0 0.0 0 0 ? S Nov03 0:00 [kthreadd]
ルート 3 0.0 0.0 0 0 ? I< Nov03 0:00 [rcu_gp]
ルート 4 0.0 0.0 0 0 ? I< Nov03 0:00 [rcu_par_gp]
ルート 6 0.0 0.0 0 0 ? I< Nov03 0:00 [kworker/0:0H
ルート 8 0.0 0.0 0 0 ? I< 11月03日 0:00 [mm_percpu_wq
ルート 9 0.0 0.0 0 0 ? S Nov03 0:00 [ksoftirqd/0]
ルート 10 0.0 0.0 0 0 ? R Nov03 0:00 [rcu_sched]
ルート 11 0.0 0.0 0 0 ? S Nov03 0:00 [migration/0]
ルート 12 0.0 0.0 0 0 ? S Nov03 0:00 [watchdog/0]
ルート 13 0.0 0.0 0 0 ? S Nov03 0:00 [cpuhp/0]
ルート 15 0.0 0.0 0 0 ? S Nov03 0:00 [kdevtmpfs]
ルート 16 0.0 0.0 0 0 ? I< Nov03 0:00 [netns]
ルート 17 0.0 0.0 0 0 ? S Nov03 0:00 [kauditd]
ルート 18 0.0 0.0 0 0 ? S Nov03 0:00 [khungtaskd]
ルート 19 0.0 0.0 0 0 ? S Nov03 0:00 [oom_reaper]
root 20 0.0 0.0 0 0 ? I< Nov03 0:00 [書き戻し]
ルート 21 0.0 0.0 0 0 ? S Nov03 0:00 [kcompactd0]
ルート 22 0.0 0.0 0 0 ? SN Nov03 0:00 [ksmd]
ルート 23 0.0 0.0 0 0 ? SN Nov03 0:00 [khugepaged]
ルート 24 0.0 0.0 0 0 ? I< Nov03 0:00 [暗号]
ルート 25 0.0 0.0 0 0 ? I< Nov03 0:00 [kintegrityd]
ルート 26 0.0 0.0 0 0 ? I< Nov03 0:00 [kblockd]
ルート 27 0.0 0.0 0 0 ? I< 11月03日 0:00 [tpm_dev_wq]
ルート 28 0.0 0.0 0 0 ? I< Nov03 0:00 [md]
ルート 29 0.0 0.0 0 0 ? I< Nov03 0:00 [edac-poller]
ルート 30 0.0 0.0 0 0 ? S Nov03 0:00 [watchdogd]
ルート 47 0.0 0.0 0 0 ? S Nov03 0:00 [kswapd0]
ルート 140 0.0 0.0 0 0 ? I< Nov03 0:00 [kthrotld]
ルート 141 0.0 0.0 0 0 ? S Nov03 0:00 [irq/24-pcieh
ルート 142 0.0 0.0 0 0 ? S Nov03 0:00 [irq/25-pcieh
ルート 143 0.0 0.0 0 0 ? S Nov03 0:00 [irq/26-pcieh
ルート 144 0.0 0.0 0 0 ? S Nov03 0:00 [irq/27-pcieh
ルート 145 0.0 0.0 0 0 ? S Nov03   
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY 時間 コマンド
ルート 1 0 0 Nov03 ? 00:00:02 /usr/lib/systemd/systemd --s
ルート 2 0 0 Nov03 ? 00:00:00 [kthreadd]
ルート 3 2 0 Nov03 ? 00:00:00 [rcu_gp]
ルート 4 2 0 Nov03 ? 00:00:00 [rcu_par_gp]
ルート 6 2 0 Nov03 ? 00:00:00 [kworker/0:0H-k

7.vmstat

仮想メモリステータス表示コマンド

vmstat 1000 // データは1000秒ごとに更新されることを示します
vmstat 1000 5 // 1000秒ごとに更新し、5回更新したら終了します

[root@localhost ~]# vmstat 1000
プロセス:
    r (実行中) // 実行を待機しているキューの長さ、つまり実行を待機しているプロセスの数を示します。 b (ブロック) // ブロックしているキューの長さ、つまり割り込み不可能なスリープ状態メモリにあるプロセスの数を示します。
    swpd // 使用されているスワップ メモリの合計量 free // 空き物理メモリの合計量 buffer // バッファ キャッシュに使用されているメモリの合計量 // キャッシュ スワップに使用されているメモリの合計量:
    si (スワップイン) // 物理メモリからスワップにスワップされたページ数、つまりデータがスワップに入るデータ速度 (kb/s) を示します。
    so (swap out) // スワップから物理メモリにスワップされるページ数、つまりデータがスワップから出るデータレート (kb/s) を示します。
io:
    bi (ブロックイン) // メモリにロードされるディスクブロックの数、つまりブロックデバイスからシステムにデータが読み込まれる速度 (kb/s) を示します。
    bo (ブロック アウト) // メモリからハード ディスクに同期されたディスク ブロックの数、つまり、データがブロック デバイスに保存される速度 (kb/s) を示します。
システム:
    in (割り込み) // 割り込みの数、つまり割り込みレート (kb/s) を示します。
    cs (コンテキストスイッチ) // コンテキストスイッチの数、つまりプロセススイッチングレート (kb/s) を示します。
CPU:
    us // ユーザー空間を示します sy // カーネル空間を示します id // アイドル率を示します wa // IO が完了するのを待つのに費やされた時間の割合を示します st // 仮想化技術によって奪われた時間 (仮想マシンの実行など) を示します

8. バックグラウンドジョブの実行

// コマンドの後に & 記号を追加すると、バックグラウンドジョブが生成されます [root@localhost ~]# sleep 1000 &
[1] 1400
//jobsコマンドは現在実行中のバックグラウンドジョブをすべて表示するために使用されます [root@localhost ~]# jobs
[1]+ ランニングスリープ1000 &
//fgコマンドはバックグラウンドジョブをフォアグラウンドに転送するために使用されます [root@localhost ~]# fg
//バックグラウンドジョブが 1 つだけの場合は、パラメータなしで直接 fg コマンドを使用して、バックグラウンドジョブをフォアグラウンドにします。ただし、ジョブが複数ある場合は、上記のコマンド実行結果の [] で囲まれた番号である %+ジョブ番号を後に付ける必要があります。
[root@localhost ~]# ジョブ
[1]- ランニングスリープ1000&
[2]+ ランニングスリープ500 &
[root@localhost ~]# fg %1
// ctrl+z を使用してフォアグラウンド プロセスをバックグラウンドに送信すると、この時点でジョブが停止します [root@localhost ~]# fg %1
睡眠1000
^Z
[1]+ 睡眠停止 1000
//停止したバックグラウンドジョブを再開するには、bg コマンド + ジョブ番号を使用します [root@localhost ~]# bg %1
[1]+睡眠1000&
[root@localhost ~]# ジョブ
[1]- ランニングスリープ1000&
[2]+ ランニングスリープ500 &
//kill とジョブ番号を指定すると、指定したジョブを手動で強制終了できます [root@localhost ~]# jobs
[1]- ランニングスリープ1000&
[2]+ ランニングスリープ500 &
[root@localhost ~]# %1 を強制終了する
[1]- 睡眠終了 1000
[root@localhost ~]# ジョブ
[2]+ ランニングスリープ500 &
//ジョブコマンドの結果 + //コマンドはジョブのデフォルト操作になります - //コマンドはジョブの2番目のデフォルト操作になります

以上がLinux運用保守の基本的なプロセス管理と環境構成分析の詳細な内容です。Linuxプロセス管理と環境構成の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Linux の操作とメンテナンスの基本的なスワップ パーティションと LVM 管理のチュートリアル
  • Linux の操作とメンテナンスの基本システムディスク管理チュートリアル
  • Linuxの運用と保守、基本的なプロセス管理、リアルタイム監視と制御
  • Linux の操作とメンテナンスの基本 httpd 静的 Web ページ チュートリアル

<<:  layui をベースにしたログインページの実装

>>:  ウェブページのフッターで注意すべきことのまとめ

推薦する

Linux入力サブシステムフレームワーク原理の分析

入力サブシステムフレームワークLinux 入力サブシステムは、上から下に向かって、入力サブシステム ...

Vueは州、都市、地区のカスケード選択を実現します

最近、省、市、地区のカスケード選択効果を実装する必要があります。省、市、地区のデータはすべてローカル...

HTML テーブル境界コントロールの詳細な説明

上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...

Docker.v19 で Docker Compose オーケストレーション ツールをインストールして構成する方法

1. Compose の紹介Compose は、マルチコンテナ Docker アプリケーションを定義...

UTF-8 ファイルの Unicode 署名 BOM (バイト オーダー マーク) の問題

最近、UTF8 エンコードの中国語 Zen Cart Web サイトをデバッグしているときに奇妙な現...

JavaScript ファクトリーパターンの説明

目次シンプルファクトリーファクトリーメソッド安全な工場方法アブストラクトファクトリー要約するシンプル...

Vue でよく使われる高階関数と包括的な例

1. 配列のよく使われる高階関数配列があり、その配列に対して次の操作を実行したいとします。 100 ...

Nginx プロキシを使用してフロントエンドのクロスドメイン問題を解決する方法

序文Nginx (「エンジン エックス」と発音) は、リバース プロキシ、ロード バランサ、HTTP...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

MySQL のクラスター化インデックスとクラスター化インデックスの成長の仕組みを理解する

このノートでは、 MySQL の B+Tree インデックスとは何ですか?クラスター化インデックスは...

CSSを使用してTDのINPUTの幅を設定する

最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...

JS、CSS スタイルのリファレンスの記述

CS: ... 1. <link type="text/css" href...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...

HTML における要素の水平および垂直中央揃えに関する議論

ページをデザインするときには、ログイン ウィンドウを中央に配置するなど、DIV を中央に配置し、ペー...

時間のかかるMySQLレコードのSQL例の詳細な説明

mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...