5.1 プロセス管理
Process Management
プロセスは実行中のプログラムである。Linuxではすべてのプロセスがツリー構造を形成し、PIDで識別される。
プロセスの概念
@startuml !theme plain skinparam backgroundColor #FEFEFE rectangle "init/systemd\n(PID 1)" as Init #FECACA rectangle "sshd" as SSHD #DBEAFE rectangle "cron" as Cron #DBEAFE rectangle "nginx" as Nginx #DBEAFE rectangle "bash\n(user)" as Bash #D1FAE5 rectangle "vim" as Vim #FEF3C7 rectangle "python" as Python #FEF3C7 Init --> SSHD Init --> Cron Init --> Nginx SSHD --> Bash Bash --> Vim Bash --> Python note right of Init すべてのプロセスの祖先 PID 1 システム初期化 end note note right of Bash 親プロセス: sshd 子プロセス: vim, python end note @enduml
図1: プロセスツリーの構造
| 用語 | 説明 |
|---|---|
| PID | プロセスID(一意の識別子) |
| PPID | 親プロセスID |
| UID | 実行ユーザーID |
| デーモン | バックグラウンドで動作するサービス |
ps(プロセス一覧)
# 現在のターミナルのプロセス
ps
# すべてのプロセス(BSD形式)
ps aux
# すべてのプロセス(Unix形式)
ps -ef
# ツリー表示
ps axjf
pstree
# 特定ユーザーのプロセス
ps -u username
# 特定プロセスを検索
ps aux | grep nginx
| 列 | 説明 |
|---|---|
| USER | 実行ユーザー |
| PID | プロセスID |
| %CPU | CPU使用率 |
| %MEM | メモリ使用率 |
| STAT | 状態(R:実行, S:待機, Z:ゾンビ) |
| COMMAND | コマンド名 |
top / htop
# リアルタイムモニタ
top
# 高機能版(要インストール)
htop
| キー(top) | 操作 |
|---|---|
| q | 終了 |
| k | プロセス終了(PID入力) |
| M | メモリ順ソート |
| P | CPU順ソート |
| 1 | CPU個別表示 |
kill(プロセス終了)
# シグナル送信
kill PID
kill -15 PID # SIGTERM(デフォルト)
kill -9 PID # SIGKILL(強制終了)
# 名前で終了
killall nginx
pkill -f 'python script.py'
# シグナル一覧
kill -l
出典
[1] man ps - report a snapshot of the current processes.
[2] man top - display Linux processes.
[3] man kill - send a signal to a process.
[2] man top - display Linux processes.
[3] man kill - send a signal to a process.