Linuxのプロセスとは。psコマンドやkillコマンドの使い方も解説

Linuxサーバーを管理するには、サーバー内で稼働しているプロセスの状況を把握し、必要に応じて強制終了するなどの対応が必要です。

本記事では、Linuxプロセスの稼働状況を把握する方法や、強制終了する

方法について解説します。

VPSならミライサーバー
\2週間無料・全プランSSD搭載/
ミライサーバーを無料で試す

Linuxのプロセスとは

プロセスの概要と、状態遷移について解説します。

プロセスとは

プロセスとは、Linux上で実行中のプログラムのことです。

Linuxでは、非常に多くのプログラムが並行して実行されていますが、その1つ1つがプロセスです。

プロセスにはプロセスIDと呼ばれる一意の番号が割り当てられており、一番最初に起動するプロセスはIDが1です。

このプロセスは特別なプロセスであり、全てのプロセスの「親プロセス」にあたります。

新たにプロセスが生成されると、プロセスIDが割り当てられ、子プロセスとして動作します。

 

Linuxを管理する上では、稼働しているプログラムが正常に動作しているかCPUやメモリなどのリソースをどれだけ使っているかを把握することが重要です。

たとえば、CPUを長時間使用するような重い処理を実行していないか、実行したまま応答がないプログラムがないかを確認します。

CPUやメモリなどのリソースを大量に消費すると、処理が重くなるなどシステム運用に支障をきたします。

そのような状態を未然に防ぐため、プロセスの稼働状況を常時監視し、万が一異常が発生した場合には、プロセスを強制終了するなどの対応が必要です。

 

このように、システムを安定稼働させるには、プロセスの状態監視が欠かせません。

プロセスの稼働状況を理解し、適切な対応がとれるようにしましょう。

プロセスの状態遷移

プロセスの稼働状況を把握するには、プロセスの状態遷移について理解しておくことが大切です。

プロセスには「実行可能状態」「実行状態」「待ち状態」の3つの状態遷移があります。

最初にコマンドやプログラムを実行すると、Linuxによってプロセスが生成されます(実行可能状態)

その後、OS(Linux)によってCPUやメモリなどのリソースを割り当てられ、処理が実行されます(実行状態)

 

コンピューターでは、複数のプロセスが並行して同時に稼働しているように見えますよね。

実際は、非常に短い時間でCPUが割り当てられ、終了すると別のプロセスがCPUを割り当てられて動作する、という流れを繰り返しています。

割り当てられたCPU時間で処理が完了しない場合、再び実行可能状態に戻ります。

CPUを割り当てられるたびに実行可能状態と実行状態を繰り返し、処理が完了すると、プロセスはなくなります。

 

実行するコマンドやプログラムによっては、キーボードによる入力待ちや、ディスク読み込み・書き込みなどの入出力処理による待ちが発生します。

その場合は、入出力処理が完了するまで、プロセスは「待ち状態」となります。

入出力処理が完了すると、再び「実行可能状態」に戻ります。

 

以上が、処理が稼働している中での「プロセスの状態遷移」です。

これ以外にも、例外的なステータスとして「ゾンビ」があります。

ゾンビプロセスは、本来であれば処理が終了してプロセスがなくなるべきところが、何らかの理由で残っているプロセスのことです。

プログラムが動作しないまま、CPUやメモリなどのリソースが確保された状態であるため、リソースを無駄に消費しています。

 

プロセスを管理するには、プロセスがどういう状態であるかを理解することが大切です。

プロセスの稼働状況を確認して現在の状態がわかると、実行状態が続いているのか、待ち状態が続いているのかで原因の切り分けができるようになります。

 

たとえば、CPU割り当て時間を長時間使っている場合は、重たい処理を実行していることを意味します。

逆に、入出力時間が多いと、待機状態が長く続くことになります。

入出力待ちか、ディスクから大量データを読み書きしているか、というCPU以外が原因です。

Linuxのプロセス管理に役立つコマンド

ここからは、実際にプロセスの稼働状況を確認するコマンドを解説します。

特によく使われるコマンドが「psコマンド」「topコマンド」です。

psコマンドでプロセスの稼働状況を確認

psコマンドは、プロセスの状態を確認する最も基本的なコマンドです。

現在ログインしているユーザーが実行しているプロセスを表示します。

$ ps

※出力例
PID  TTY             TIME CMD
2954 pts/0 00:00:00 bash
3217  pts/0    00:00:00 ps

psコマンドはたくさんのオプションがありますが、サーバー全体で稼働しているプロセスを知りたい場合、一般的には「aux」を付与します。

$ ps aux

※出力例
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1056 72 ? S 18:40 0:00 init [3]
root 1377 0.0 2.4 2324 1176 pts/0 S 20:52 0:00 bash
root 1380 0.0 3.6 3460 1844 pts/0 S 20:52 0:00 kterm
root 2382 0.0 1.4 2320 1168 pts/1 S 20:52 0:00 bash
root 4403 0.0 1.4 2456 888 pts/0 R 20:56 0:00 ps aux

出力内容は以下のとおりです。

出力内容説明
USER実行しているユーザー名
PIDプロセスID
%CPUCPU使用率
%MEMメモリ使用率
VSZ仮想メモリのサイズ
RSS実際の使用メモリサイズ
TTY端末
STATプロセスの状態
R:実行可能状態または実行中
S:待ち状態(割り込み可能)
D:待ち状態(割り込み不可)
T:実行中断 
Z:ゾンビ状態
STARTプロセス生成時刻
(処理開始時刻)
TIMECPU実行時間
COMMAND実行されているコマンド

このようにpsコマンドを実行すると、実行しているコマンドおよびプロセスのCPUやメモリの使用率、プロセスの状態がわかります。

 

しかし、psコマンドは実行したタイミングでのプロセス稼働状況しかわかりません。

リアルタイムでプロセス状況を把握したい場合は、topコマンドが便利です。

$ top

※出力例
top – 22:36:35 up 36 days, 19:29, 1 user, load average: 0.00, 0.01, 0.02
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882460 total, 833584 free, 806116 used, 242760 buff/cache
KiB Swap: 1679356 total, 1505020 free, 174336 used. 908044 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30894 root 20 0 161888 2208 1552 R 0.7 0.1 0:00.12 top
1056 root 20 0 574196 696 256 S 0.3 0.0 26:32.17 tuned
1 root 20 0 191064 2744 1584 S 0.0 0.1 9:19.03 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.54 kthread
:
(以下省略)

psコマンドやtopコマンドでプロセスの稼働状況を常にチェックし、異常時に確認できるようにするとよいでしょう。

Linuxのプロセスの強制終了

プログラム実行後に応答が返ってこないまま処理が終わらない場合や、CPUやメモリなどリソースを大量消費しシステムに影響が出ている場合は、プロセスを強制停止することがあります。

プロセスを停止するには、killコマンドを実行します。

プロセスIDを指定することで、そのプロセスに対してシグナルを送ることができます。

$ kill <プロセスID>

プロセスIDは、psコマンドやtopコマンドで確認します。

間違って別のプロセスを終了してしまわないように注意しましょう。

 

killコマンドの後にオプションとしてシグナル番号を指定することで、プロセスに対して該当のシグナルを送ります。

シグナル番号を指定しない場合、「15」(SIGTERM)が送られます。

シグナルには、以下のような種類があります。

シグナル番号シグナル名意味
1SIGHUPハングアップ
2SIGINT割り込み(Ctrl+C)
3SIGQUIT中止(Ctrl+¥)
9SIGKILLプロセスの強制終了
15SIGTERMプロセスの終了(デフォルト)
18SIGCONTプロセスの再開
19SIGSTOPプロセスの停止(Ctrl+Z)

killコマンドでも終了しない(killコマンドを受け付けない)場合は、「-9」のシグナル番号を使用して強制終了させます。

$ kill -9 <プロセスID>

まとめ

今回はLinuxのプロセス管理について解説しました。

Linuxサーバーの管理をするうえで、プロセス管理は基本です。

サーバーを安定稼働させるためには、プロセスの稼働状態を監視し、トラブルが発生したときに状況を把握、すぐに対応できるようにすることが大切です。

psやtopコマンドはプロセスを管理するうえで基本かつ便利なコマンドなので、必ず使いこなせるようになりましょう。

UnixやLinuxのVPSならミライサーバー

ミライサーバーは、アシストアップ株式会社が提供している、Unix系サーバーに特化したホスティングサービスです。

ミライサーバーのVPSでは、高速処理が可能なSSD全プランに搭載しています。

OSは、UbuntuDebianAlmaLinuxなどの豊富なラインアップから選択できます。

2週間無料トライアルを実施しておりますので、まずはお気軽にお試しください。

▼ミライサーバーについてはこちら▼Unix系OS専門のホスティングサービス「ミライサーバー」

VPSなら「ミライサーバー」

・全プランSSD搭載
・2週間無料

▶ ミライサーバーを無料で試す

関連記事

特集記事

TOP