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 をベースにしたログインページの実装

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

推薦する

ノードにおけるhttpモジュールの使用と実行プロセス

ノードにおけるhttpの役割は何ですか? httpモジュールの役割は、サーバーの作成と記述を支援する...

MySQL 5.x の文字化け問題の解決方法

MySQL はよく使われるオープンソースのデータベース ソフトウェアですが、初めてのユーザーにはあま...

Linux TTY/PTS の違いの概要

キーボードで文字を入力すると、対応するプロセスにどのように送信されるのでしょうか? ps や who...

Day.js をベースにした JavaScript での日付処理のよりエレガントな方法

目次day.js を使用する理由モーメントデイ.js day.js がなければどうなるでしょうか? ...

docker pruneコマンドは、あまり使用されないデータを定期的にクリーンアップするために使用できます。

目次docker システム df docker システム プルーンNoneオブジェクトをクリーンアッ...

MySQL 5.7.29 + Win64 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

公式サイトをダウンロード自分に合ったバージョンを選択してダウンロードしてください。 ダウンロードをク...

エラー 2002 (HY000): ソケット '/tmp/mysql.sock' 経由でローカル MySQL サーバーに接続できません

エラーメッセージ:エラー 2002 (HY000): ソケット '/tmp/mysql.so...

InnoDB の主な機能 - 挿入キャッシュ、2 度書き込み、適応ハッシュ インデックスの詳細

InnoDB ストレージ エンジンの主な機能には、挿入バッファ、二重書き込み、適応ハッシュインデック...

MySQLデータベースはsysbenchに基づくOLTPベンチマークテストを実装します

Sysbench は、MySQL データベース ストレージ エンジン InnoDB のディスク I/...

Vue における ref と $refs の紹介と使用例

序文JavaScript では、document.querySelector("#demo...

VueでTypeScriptを使用する方法

導入近年、TypeScript を求める声がますます高まり、TypeScript はフロントエンドに...

MySql でリモート接続を許可する方法

MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...

Nginx でバージョン番号を隠したり偽造したりする方法

1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...

Zabbixは複数のmysqlプロセスの監視を実装します

1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...

MySQL レプリケーション テーブルの詳細とサンプル コード

MySQL レプリケーション テーブルの詳細な説明テーブル構造、インデックス、デフォルト値などを含む...