プロセスとは?
実行中のプログラムのことをプロセスと呼びます。プロセスは、1つのコマンドを実行することによって、実行ファイルをメモリに格納し、メモリ上でCPUがプログラムを実行します。このメモリ上で実行中のプログラムがプロセスになります。
また、コマンドを実行するたびに、プロセスは別々のものが作られそれらはプロセスごとに一意のプロセスIDが割り当てられています。このプロセスは、ファイルのオーナーと同様に実行ユーザーが設定されており、他人のプロセスを操作することはできません。
psコマンド
実行中のプロセスを表示するコマンドです。(自分が起動したプロセス)
$ ps
PID TTY TIME CMD
9793 pts/0 0:00.00 bash
13376 pts/0 0:00.00 ps
「PID」 ・・・ プロセスID
「TTY」 ・・・ プロセスが実行されている端末
「TIME」 ・・・ 実行時間(CPU時間)
「CMD」 ・・・ コマンド/プログラムファイル名
オプション「aux」
全ユーザーのプロセスをより詳細に見ることができます。
aは他の端末で実行されているプロセスの表示、uはユーザー名を含めて実行プロセスを表示し、xはpsコマンドを実行したユーザー全てのプロセスの表示、を意味します。
その他に、パイプ(|)でgrepと組み合わせによって、絞り込みも可能です。
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 194072 4560 ? Ss 13:33 0.07 /usr/lib/systemd/syste
「USER」 ・・・ 実行しているユーザー名
「PID」 ・・・ プロセスID
「%CPU」 ・・・ CPU使用率
「%MEM」 ・・・ メモリ使用率
「VSZ」 ・・・ 仮想メモリを含んだメモリ使用量
「RSS」 ・・・ 実際の使用メモリ
「TTY」 ・・・ 実行しているターミナル
「START」 ・・・ プロセスの状態
「TIME」 ・・・ 実行時間(CPU時間)
「COMMAND」 ・・・ コマンド名
ジョブ
まとめて実行されるプロセスの集まりがジョブであり、シェルごとに管理されます。
またそれぞれのジョブには、「ジョブ番号」がシェルによって割り当てられています。
コマンドを入力して「Enter」キーを入力することで、1つのジョブが作成されます。また、「ls | more」と実行した場合は、lsコマンドとmoreコマンド、2つのコマンドが実行されますが、これも1つのジョブになります。
ジョブとプロセスの違い
プロセスは、プログラムの実行単位で、プロセスIDはカーネルによって管理されています。
また、ジョブは、複数のコマンドをまとめたものでプロセスの集まりになります。
バックグラウンドとフォアグラウンド
シェルの画面外でコマンドを実行することをバックグラウンド、シェルの画面内で実行することをフォアグラウンドと呼びます。
jobsコマンド
現在のジョブの一覧を表示するコマンドのことです。
$ jobs
[1]+ 実行中 sleep 10
ジョブID、実行状況、実行コマンドを表示します。
fgコマンド
ジョブをフォアグラウンドにするコマンドです。
$ fg %<ジョブID>
Ctrl + zで処理を一時停止できます。
コマンドの後ろに"&"をつけると、フォアグラウンドになります。
$ sleep 10 &
bgコマンド
ジョブをバックグラウンドにするコマンドです。
長い時間がかかる処理をバックグラウンドで実行することによって、コマンド処理が終わるの待たずに、他の処理を行うことができます。
$ bg %<ジョブID>
killコマンド
ジョブやプロセスを終了させるコマンドになります。
$ kill %<ジョブID>
フォアグラウンドのジョブはCtrl+cで終了できるのに対して、停止中のバックグラウンドのジョブはkillコマンドで終了できます。
参考