注意!
この記事は誤った情報を含んでいる可能性があるため、裏どり & 修正中です。
近日中に対応するのでいましばらくお待ちください
はじめに
今回は プロセス と ジョブ について書いていきます。
プロセス とは
プロセスとは、OS 上で実行されているプログラムのことを指す。
Linux はマルチプロセスであり 、CPU がタスクを切り替えることで複数のプロセスが同時に管理されている。
1 | 2 |
---|---|
ゾンビプロセス | 停止しているが、何らかの理由でメモリを解放していないプロセス。存在する場合は、kill コマンドなどで削除する。 |
デーモン | 長期間実行され続け、外部からのリクエストを契機に処理がされるプロセス。名前は d で終わることが多い( sshd、named、httpd 等 ) |
ジョブ とは
プロセスは OS から見たプログラムの単位である一方で、ジョブは起動中のシェルから見たプログラムの単位である。
シェルからプログラムを立ち上げるとジョブ番号が割り当てられる。
& を用いてコマンドを実行する
コマンドの末尾に &
をつけて実行することで、そのコマンドをバックグラウンド上で処理させることができる。
[ec2-user@localhost ~]$ sleep 10 &
[2] 2023
[ec2-user@localhost ~]$
コマンド
ps コマンド
現在、動作しているプロセスの一覧を表示するコマンド。
引数なしだと、現在利用しているシェルの持っているプロセスが表示される。
[ec2-user@localhost ~]$ ps
PID TTY TIME CMD
2468 pts/0 00:00:00 bash
2492 pts/0 00:00:00 ps
PID:プロセスID
TTY:端末名
TIME:プロセスが実行された実行時間
CMD:コマンド名
オプション | 意味 |
---|---|
-e | 稼働中のプロセスをすべて表示する |
-f | より詳細な情報を表示する |
aux | メモリや CPU などの使用状況をプロセスごとに表示する |
-u ユーザ名 | 指定したユーザの持っているプロセス一覧を表示する |
[ec2-user@localhost ~]$ ps -ef | head -2
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:49 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize=32
UID:実行中ユーザ
PID:プロセス ID
PPID:親プロセス ID
C:CPU 使用率
STIME:プロセスの立ち上がった時間
TTY:立ち上げた端末名( ? は端末がないもの )
TIME:利用した総 CPU 時間
CMD:コマンド名
[ec2-user@localhost ~]$ ps aux | head -2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 1.6 105020 16304 ? Ss 08:49 0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize=32
USER:実行中ユーザ
PID:プロセス ID
PPID:親プロセス ID
%CPU:CPU 使用率
%MEM:メモリ使用率
VSZ:仮想メモリサイズ
RSS:使用されているメモリ量
TTY:立ち上げた端末名( ? は端末がないもの)
STAT:プロセスの状態( Z だとゾンビプロセス )
START:プロセスが起動した時間
TIME:利用した総 CPU 時間
CMD:コマンド名
top コマンド
実行中のプロセスの状態をリアルタイムで表示
top - 10:59:54 up 1 min, 1 user, load average: 0.24, 0.19, 0.08
Tasks: 103 total, 1 running, 102 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
MiB Mem : 949.6 total, 604.6 free, 148.6 used, 196.3 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 661.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 105024 16308 10040 S 0.0 1.7 0:00.79 systemd
オプション | 意味 |
---|---|
-d 間隔 | 表示する間隔を指定 |
実行中のコマンド | 意味 |
---|---|
k | プロセスを kill する |
q | 終了する |
kill コマンド
実行中のプロセスを停止・再起動・一時停止する
[ec2-user@localhost ~]$ ps -ef | grep sleep
ec2-user 2445 2213 0 11:04 pts/0 00:00:00 sleep 100
ec2-user 2447 2213 0 11:04 pts/0 00:00:00 grep --color=auto sleep
[ec2-user@localhost ~]$ kill 2445
[1]+ Terminated sleep 100
実行例 | 実行結果 |
---|---|
kill -1(-SIGHUP) プロセスID | プロセスの再起動をする |
kill -2(-SIGINT) プロセスID | プロセスの割り込みをする( ctrl + c ) |
kill -9(-SIGKILL) プロセスID | プロセスの強制終了をする |
kill -15(-SIGTERM) プロセスID | プロセスの終了をする |
kill -18(-CONT) プロセスID | プロセスを再開する |
kill -19(-STOP) プロセスID | プロセスの一時停止をする |
jobs コマンド
現在実行中のジョブ一覧を表示するコマンド
[ec2-user@localhost ~]$ jobs
[1]- Running ./test.sh &
[2]+ Stopped sleep 100
kill コマンドを利用したジョブの削除
ジョブを削除するには、%ジョブ番号 を用いる
[ec2-user@localhost ~]$ jobs
[1]- Running sleep 100 &
[2]+ Running ./test.sh &
[ec2-user@localhost ~]$ kill %2
[2]+ Terminated ./test.sh
[ec2-user@localhost ~]$ jobs
[1]+ Running sleep 100 &
ctrl + z ( ショートカットキー )
現在実行中のジョブを停止する
[ec2-user@localhost ~]$ sleep 100
^Z
[1]+ Stopped sleep 100
[ec2-user@localhost ~]$ jobs
[1]+ Stopped sleep 100
fg コマンド
ジョブをフォアグラウンド実行
[ec2-user@localhost ~]$ jobs
[1]+ Running sleep 100 &
[ec2-user@localhost ~]$ fg %1
sleep 100
bg コマンド
ジョブをバックグラウンド実行
[ec2-user@localhost ~]$ jobs
[1]+ Stopped sleep 100
[ec2-user@localhost ~]$ bg %1
[1]+ sleep 100 &
[ec2-user@localhost ~]$ jobs
[1]+ Running sleep 100 &
おわりに
プロセス、ジョブに関わるコマンドなどについて触れました。
業務でさらっと ps コマンド叩いてプロセス確認できたらかっこいいね。