序章

Linuxサーバーは、他の最新のコンピューターと同様に、複数のアプリケーションを実行します。 これらは、個別のプロセスと呼ばれ、管理されます。

Linuxは、プロセスのライフサイクル(つまり、起動、シャットダウン、メモリ割り当てなど)の低レベルの舞台裏の管理を処理しますが、オペレーティングシステムと対話してそれらを管理する方法が必要になります。より高いレベル。

このガイドでは、プロセス管理のいくつかの基本的な側面について学習します。 Linuxには、この目的のために多数の標準の組み込みツールが用意されています。

これらのアイデアはUbuntu20.04環境で検討しますが、最新のLinuxディストリビューションも同様に動作します。

ステップ1-Linuxで実行中のプロセスを表示する方法

サーバーで実行されているすべてのプロセスを確認するには、 top 指図:

  1. top
Output
top - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1019600k total, 316576k used, 703024k free, 7652k buffers Swap: 0k total, 0k used, 0k free, 258976k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0 8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset 9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs

出力の最初の数行は、CPU/メモリの負荷や実行中のタスクの総数などのシステム統計を提供します。

実行中のプロセスが1つあり、CPUサイクルをアクティブに使用していないためにスリープと見なされる55のプロセスがあることがわかります。

表示される出力の残りの部分には、実行中のプロセスとその使用統計が表示されます。 デフォルトでは、 top これらはCPU使用率で自動的に並べ替えられるため、最もビジーなプロセスを最初に確認できます。 top の標準キーの組み合わせを使用してシェルを停止するまで、シェルで実行を継続します Ctrl+C 実行中のプロセスを終了します。 これは kill 信号を送り、可能であれば正常に停止するようにプロセスに指示します。

の改良版 top、と呼ばれる htop、ほとんどのパッケージリポジトリで利用できます。 Ubuntu 20.04では、 apt:

  1. sudo apt install htop

その後、 htop コマンドが利用可能になります:

  1. htop
Output
Mem[||||||||||| 49/995MB] Load average: 0.00 0.03 0.05 CPU[ 0.0%] Tasks: 21, 3 thr; 1 running Swp[ 0/0MB] Uptime: 00:58:11 PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1259 root 20 0 25660 1880 1368 R 0.0 0.2 0:00.06 htop 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 /sbin/init 311 root 20 0 17224 636 440 S 0.0 0.1 0:00.07 upstart-udev-brid 314 root 20 0 21592 1280 760 S 0.0 0.1 0:00.06 /sbin/udevd --dae 389 messagebu 20 0 23808 688 444 S 0.0 0.1 0:00.01 dbus-daemon --sys 407 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.02 rsyslogd -c5 408 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5 409 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5 406 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.04 rsyslogd -c5 553 root 20 0 15180 400 204 S 0.0 0.0 0:00.01 upstart-socket-br

htop 他の機能の中でも、複数のCPUスレッドのより良い視覚化、最新の端末での色のサポートのより良い認識、およびより多くの並べ替えオプションを提供します。 ようではない top、デフォルトで常にインストールされるわけではありませんが、ドロップインリプレースメントと見なすことができます。 終了できます htop を押すことによって Ctrl+C と同じように top. topおよびhtopの使用方法の詳細を学ぶこともできます。

次のセクションでは、ツールを使用して特定のプロセスを照会する方法について学習します。

ステップ2–psを使用してプロセスを一覧表示する方法

tophtop グラフィカルタスクマネージャーと同様に、実行中のプロセスを表示するためのダッシュボードインターフェイスを提供します。 ダッシュボードインターフェイスは概要を提供できますが、通常は直接実行可能な出力を返しません。 このために、Linuxはと呼ばれる別の標準コマンドを提供します ps 実行中のプロセスを照会します。

ランニング ps 引数がないと、ほとんど情報が得られません。

  1. ps
Output
PID TTY TIME CMD 1017 pts/0 00:00:00 bash 1262 pts/0 00:00:00 ps

この出力には、現在のユーザーおよびターミナルセッションに関連付けられているすべてのプロセスが表示されます。 これは、実行しているだけの場合に意味があります bash シェルとこれ ps 現在、この端末内のコマンド。

このシステムのプロセスの全体像を把握するには、次のコマンドを実行します。 ps aux:

  1. ps aux
Output
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 24188 2120 ? Ss 14:28 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 14:28 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 14:28 0:00 [ksoftirqd/0] root 6 0.0 0.0 0 0 ? S 14:28 0:00 [migration/0] root 7 0.0 0.0 0 0 ? S 14:28 0:00 [watchdog/0] root 8 0.0 0.0 0 0 ? S< 14:28 0:00 [cpuset] root 9 0.0 0.0 0 0 ? S< 14:28 0:00 [khelper] …

これらのオプションは ps すべてのユーザーが所有するプロセス(端末の関連付けに関係なく)をより人間が読める形式で表示します。

パイプを利用することで、の出力内を検索できます ps aux を使用して grep、特定のプロセスの名前を返すため。 これは、クラッシュしたと思われる場合、または何らかの理由で停止する必要がある場合に役立ちます。

  1. ps aux | grep bash
Output
sammy 41664 0.7 0.0 34162880 2528 s000 S 1:35pm 0:00.04 -bash sammy 41748 0.0 0.0 34122844 828 s000 S+ 1:35pm 0:00.00 grep bash

これは両方を返します grep 実行したばかりのプロセス、および bash 現在実行中のシェル。 また、合計メモリとCPU使用率、実行時間、および上記の強調表示された出力で、プロセスIDを返します。 LinuxおよびUnixライクなシステムでは、各プロセスにプロセスIDまたはPIDが割り当てられます。 これは、オペレーティングシステムがプロセスを識別して追跡する方法です。

プロセスのPIDを取得する簡単な方法は、 pgrep 指図:

  1. pgrep bash
Output
1017

init と呼ばれる、起動時に生成される最初のプロセスには、「1」のPIDが与えられます。

  1. pgrep init
Output
1

このプロセスは、システム上の他のすべてのプロセスを生成する責任があります。 後のプロセスには、より大きなPID番号が与えられます。

プロセスのparentは、プロセスの生成を担当したプロセスです。 親プロセスにはPPIDがあり、これは、次のような多くのプロセス管理アプリケーションの列ヘッダーに表示されます。 top, htopps.

プロセスに関するユーザーとオペレーティングシステム間の通信には、操作中のある時点でのプロセス名とPID間の変換が含まれます。 これが、これらのユーティリティが常に出力にPIDを含める理由です。 次のセクションでは、PIDを使用して、実行中のプロセスに停止、再開、またはその他の信号を送信する方法を学習します。

ステップ3–Linuxでプロセス信号を送信する方法

Linuxのすべてのプロセスは、信号に応答します。 シグナルは、動作を終了または変更するようにプログラムに指示するオペレーティングシステムレベルの方法です。

プログラムに信号を渡す最も一般的な方法は、 kill 指図。 ご想像のとおり、このユーティリティのデフォルトの機能は、プロセスを強制終了しようとすることです。

  1. kill PID_of_target_process

これにより、TERMシグナルがプロセスに送信されます。 TERMシグナルは、プロセスを終了するように指示します。 これにより、プログラムはクリーンアップ操作を実行し、スムーズに終了できます。

プログラムが誤動作していて、TERMシグナルが与えられたときに終了しない場合は、 KILL 信号:

  1. kill -KILL PID_of_target_process

これは、プログラムに送信されない特別な信号です。

代わりに、プロセスをシャットダウンするオペレーティングシステムカーネルに渡されます。 これは、送信された信号を無視するプログラムをバイパスするために使用されます。

各信号には、名前の代わりに渡すことができる番号が関連付けられています。 たとえば、「-TERM」の代わりに「-15」を渡し、「-KILL」の代わりに「-9」を渡すことができます。

信号は、プログラムをシャットダウンするためだけに使用されるわけではありません。 また、他のアクションを実行するために使用することもできます。

たとえば、バックグラウンドで常に実行されるように設計されている多くのプロセス(「デーモン」と呼ばれることもあります)は、与えられたときに自動的に再起動します。 HUP、またはhang-up信号。 Apache Webサーバーは通常、このように動作します。

  1. sudo kill -HUP pid_of_apache

上記のコマンドにより、Apacheは構成ファイルをリロードし、コンテンツの提供を再開します。

注:このような多くのバックグラウンドプロセスは、システムサービスを介して管理されます。これらのプロセスは、それらと対話するための追加のサーフェスを提供します。通常、 HUP 実行中の1つのプロセスに直接信号を送ります。 さまざまなサービスの構成ファイルを確認すると、さまざまなサービスが service restart フックは、ログやその他のレポートを提供しながら、まさにそれを実行するように設計されています–特定のプロセスにシグナルを送信します–。

で送信できるすべての信号を一覧表示できます kill とともに -l 国旗:

  1. kill -l
Output
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

信号を送信する従来の方法はPIDを使用する方法ですが、通常のプロセス名を使用してこれを行う方法もあります。

The pkill コマンドは、ほぼ同じように機能します kill、ただし、代わりにプロセス名で動作します。

  1. pkill -9 ping

上記のコマンドは、次と同等です。

  1. kill -9 `pgrep ping`

特定のプロセスのすべてのインスタンスにシグナルを送信する場合は、 killall 指図:

  1. killall firefox

上記のコマンドは、TERMシグナルを次のすべてのインスタンスに送信します。 firefox コンピューター上で実行しています。

ステップ4–プロセスの優先順位を調整する方法

多くの場合、サーバー環境で優先されるプロセスを調整する必要があります。

一部のプロセスは、状況にとってミッションクリティカルと見なされる場合がありますが、他のプロセスは、リソースが残っている場合は常に実行される場合があります。

Linuxは、nicenessという値を使用して優先度を制御します。

優先度の高いタスクは、リソースも共有しないため、優れたとは見なされません。 一方、優先度の低いプロセスは、最小限のリソースのみを使用することを要求するため、優れたです。

あなたが走ったとき top 記事の冒頭に「NI」と記されたコラムがありました。 これは、プロセスのnice値です。

  1. top
[secondary_label Output] 
Tasks:  56 total,   1 running,  55 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1019600k total,   324496k used,   695104k free,     8512k buffers
Swap:        0k total,        0k used,        0k free,   264812k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
 1635 root      20   0 17300 1200  920 R  0.3  0.1   0:00.01 top                
    1 root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.11 ksoftirqd/0

適切な値は、システムに応じて-19 / -20(最高の優先度)から19/20(最低の優先度)の範囲になります。

特定の素晴らしい値でプログラムを実行するには、 nice 指図:

  1. nice -n 15 command_to_execute

これは、新しいプログラムを開始するときにのみ機能します。

すでに実行されているプログラムの適切な値を変更するには、次のツールを使用します。 renice:

  1. renice 0 PID_to_prioritize

結論

プロセス管理はLinuxの基本的な部分であり、ほとんどすべてのコンテキストで役立ちます。 実践的なシステム管理を行っていない場合でも、スタックしたプロセスを追跡して慎重に処理できると非常に役立ちます。

次に、使用方法を学びたいと思うかもしれません netstatdu 他のサーバーリソースを監視する