序章

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とは異なり、デフォルトで常にインストールされるとは限りませんが、ドロップインリプレースメントと見なすことができます。 topと同様に、Ctrl+Cを押すと、htopを終了できます。 topおよびhtopの使用方法の詳細を学ぶこともできます。

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

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

topおよびhtopは、グラフィカルタスクマネージャーと同様に実行中のプロセスを表示するためのダッシュボードインターフェイスを提供します。 ダッシュボードインターフェイスは概要を提供できますが、通常は直接実行可能な出力を返しません。 このために、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があり、tophtoppsなどの多くのプロセス管理アプリケーションの列ヘッダーに表示されます。

プロセスに関するユーザーとオペレーティングシステム間の通信には、操作中のある時点でのプロセス名と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フックが、ログやその他のレポートを提供しながら、まさにそれを実行するように設計されていることがわかります。

[X62X]