キャリテク!マガジン
- TOP
- キャリテク!マガジン
- Linux:プロセスとジョブの違いは?関連コマンドと、インストール方法を確認
Linux:プロセスとジョブの違いは?関連コマンドと、インストール方法を確認
こんにちは、吉政創成 アシスタントの菱沼です。
今回も「さわって学ぶLinux入門テキスト/赤星リナ氏著(マイナビ出版)」を片手に勉強していきます。
テキストではCentOSが使用されています。CentOS8は2021年12月末にサポートが終了し、次世代へ移行するという話があるため、詳細はそこまで掘り下げず、コマンドの確認が中心となります。
なお、今回の内容で一通りテキストの内容を学んだため、Linux学習コラムは終了となります。
最終回はプロセスとジョブをメインに学び、最後の方でインストールやファイルの圧縮等のコマンドを簡単にさらいます。どうぞ超初心者の方、最後までお付き合いいただければ幸いです。
■プロセスとジョブの違い
プロセスとジョブという言葉を耳にする機会は何度かありましたが、何となく名前から「イメージ的にこういう感じ…?」くらいでしかなく、しっかりとそれぞれの意味を確認したことはありませんでした。まずはそれぞれの違いについて確認します。
- プロセス:
- メモリ上で実行状態にあるプログラム
- カーネルから見た処理の単位
- 「PID(プロセスID)」という一意のIDが降られ、プロセスが終了するまで変化しない
- ジョブ :
- シェルに入力した1行が1ジョブに該当
- シェルから見た処理の単位
- シェルごとにジョブ番号が振られる
- バックグラウンド(裏側)とフォアグラウンド(前面)の二種類がある
■プロセス関係で使うコマンド
テキストでは次のコマンドを確認していくと書かれています。
ps | プロセスを確認する |
ps aux | すべてのプロセスを表示する |
pstree | プロセスの親子関係を確認する |
top | 今動いているプロセスをほぼリアルタイムで表示する |
free | メモリの利用状況を確認する |
kill | プロセスにコマンドを送る |
killall | プロセス名でコマンドを送る |
では早速コマンドを確認していきます。
現在実行中のプロセスを確認する[ps][ps aux]
まずはオプションを何もつけずに実行してみます。
それぞれの項目の意味は画像の通りです。
では次にオプションをつけた[ps aux]ですが、それぞれのオプションがさす意味は次の通りです。
a | 端末(サーバーのような別端末でも可)に関連づいたすべてのプロセスを表示 |
u | ユーザー名を含めて実行プロセスを表示 |
x | 端末から起動されたものではないほかのプロセス(デーモンプロセスなど)も含めてすべてのプロセスを表示する |
上表以外にもオプションはあり、プロセスごとに階層で表示してくれる[f]や、[-]をつけると変わるものもありますので、興味のある方は調べてみてくださいね。
(パイプ(|)でgrepと組み合わせれば絞りこみもできるようです。)
一応、表にあるものはそれぞれをひとつずつ、または組み合わせで実行してみましたが、ここでは[ps aux]の一部分だけ上げます。
プロセスの状態を表すSTATで表示される結果は下表のとおりですが、テキストに書かれているのは~Zまでです。画像で見るとわかる「Ss」や「R+」、auxで実行したときに確認できた「>」といった部分も気になったので調べて一覧に追記しました。
<STATで表示される項目>
R | 実行中(Running) |
S | スリープ(Sleeping) |
D | スリープ(割り込み不可能) |
T | 停止(stop) |
Z | ゾンビプロセス(zombie) |
s(小文字) | セッションリーダー |
O | 実行中 |
I | プロセスを生成中 |
N | 優先度が低い |
> | 優先度が高い |
+ | フォアグラウンドのプロセスグループに入っている |
プロセスの親子関係を確認する[pstree]
この項目についての説明は次の通りです。
P.236
あるプロセスの実行中にほかのプロセスを起動したとき、元のプロセスを「親プロセス」、起動されたプロセスを「子プロセス」といいます。 たとえば、bashは今起動しているシェルプログラムなので親プロセス、コマンドが実行されるとそれが子プロセスになります。
pstreeで使用できるオプションは[-n(プロセスIDで並び替え)][-p(プロセスIDを表示)]だそうです。ここでは[pstree -p]で実行してみた結果の画像を載せます。
()内の数字がプロセスIDです。オプションなしのただの[pstree]なら()の表示はなく、また、[-n]をつければ確かにプロセスID順になりました。
なお、[pstree]がインストールされていない環境の場合はエラーメッセージが出るそうです。インストールするにはrootで入ってから、[yum -y install psmisc]を実行すればインストールされるそうです (インストールについては文末にも説明がありますので、そちらもご確認ください)。
実行中プロセスのリアルタイム表示[top]
システム全体にかかっている負荷を確認できるもので、プロセス、CPU、メモリ、スワップの統計情報が見ることができるそうです。オプションをつけなければCPU使用率が多い順に表示されます。
実行すると[vi]の時のように別画面っぽい感じで表示されるので、終わりたいときは[q]キーを押すと元のコマンド入力に戻れます。
[-a](メモリ使用率準)、[-p (PID)](特定のPIDのプロセス)、[-d1](1秒ごとに更新)
メモリの利用状況を確認する[free]
システムの物理メモリやスワップメモリの使用量、空き容量がわかるそうです。
そのまま実行する場合、単位はKBです。MBにしたい場合は[-m]で、B単位なら[-b]、わかりやすい表示にしたいなら[-h]が使用できるようです。
プロセスを終了する[kill (PID)]
バックグラウンドで作業中のコマンドを終了するときに使用するものです。
止めたいプロセスのプロセスIDは[ps]コマンドで確認して実行します。なぜか終わらない場合には強制終了のオプションが用意されており、[kill -9 (PID)]と書くようです。
画像はプロセスIDで試したものですが、ジョブ番号での指定も可能だそうです。
ジョブ番号の確認方法は後述しますが、ジョブ番号を指定する際は、番号の前に[%]をつけます。(例:kill %(ジョブ番号))
プロセス名を指定して終了する[killall (プロセス名)]
[kill]コマンド同様ですが、プロセス名(例えばtopとか。psで確認できるCMDの部分)を指定します。 こちらでの強制終了も[kill]同様、[-9]です。
■ジョブ関係で使うコマンド
ジョブでは次のコマンドを確認していくようです。
Ctrl+z | 実行しているジョブを一時停止し、バックグラウンドへ移す |
Ctrl+c | フォアグラウンドで実行しているジョブを終了する |
fg ジョブ番号 | バックグラウンドジョブをフォアグラウンドで実行する |
bg ジョブ番号 | バックグラウンドで実行状態にする |
jobs | ジョブ一覧を表示する |
P.247
フォアグラウンドジョブで時間のかかるジョブを実行すると、その処理が終わるまでシェルも待ってしまうので、次のコマンドを入力できません。この状態になるとほかの処理はできません。
そこで、時間のかかるスクリプトや大きなプログラムのコンパイル(作成したプログラムをコンピュータが実行できる形に変換する処理)などはバックグラウンドで実行します。そうすれば、フォアグラウンドで別のコマンドを実行できます。
フォアグラウンドで動かせるジョブは1つだけですが、バックグラウンドでは複数のジョブを動かすことができます。
という事でまずはジョブの確認コマンドから。
動いているジョブを確認する[jobs]
現状何もしてないので、このまま実行してもなにも起きません。そのため、何かの処理をバックグラウンドで実行させてみます。
ちなみに、コマンドを打つ際、末尾に[&]をつけてあげるとバックグラウンドの処理として実行できるそうですが、上表で書いた通り、ショートカットキー[Ctrl+z]でもバックグラウンドに移動後、一時停止にできるそう。せっかくなので両方のやり方でやってみます。
まずは普通に[top]を実行後、[Ctrl+z]をします。そのあとついでに[top &]を2度繰り返します。これで、裏側には3つの[top]の処理がいるはずです。さあ満を持して[jobs]を実行しましょう。
たしかに3つ分の[top]が一時停止中ですが、いることがわかります。
[]の数字がジョブ番号で、その後ろについている「+」は現在実行中のジョブ、「-」はその直前に実行されたジョブだそうです。 ここではすべてステータスが「Stopped」になっていますが、「Running(バックで実行中)」、「Done(終了)」というステータスが表示されます。
バックグラウンドで実行中のジョブをフォアグラウンドに持ってくる [fg ジョブ番号]
ジョブ番号2を表側に持ってくるには、下のようにコマンドを実行します。
一時停止したジョブをバックグラウンドで実行する [bg ジョブ番号]
現状、すべてバックグラウンドで一時停止中なので、「Running」状態でバックグラウンドにいてくれる処理を追加します。
今回は5分間入力を受け付けないという[sleep 5m]というのがあるそうなので、これに[&]をつけて最初から裏側にいる状態にします。(これを実行すると、表側でただ5分間待機状態になるので…) 裏でお待ちの[sleep 5m]のジョブ番号を確認すると[5]だそうなので、[bg 5]と書いて実行します。
今回はもともと裏で実行されていたのでメッセージのみ表示されましたが、表から裏に正しくいっていれば成功がわかるようになっているようです。
ショートカットCtrl+cでキャンセル
フォアグラウンドジョブを終了したい場合はCtrl+cで終了できるとのこと。例えばこんな感じ。
コマンドを途中で実行してしまい、そのあとが続けられない!なんてときにお試しください。
ちなみにショートカットといえば「Ctrl+s」をよく使われる方、多いと思います。私も使います。
これをやってしまうとロックがかかり、キーボード入力が効かなくなるそうなので、うっかりやってしまいそうな方は解除の[Ctrl+q]を覚えておきましょう。 ここまでがプロセス、ジョブ関連で使用する主なコマンドの確認です。
■アーカイブ・圧縮で使うコマンドとパッケージインストールの方法
ここからは7章の内容を簡単にご紹介します。
7章ではハードディスクの増設時などに行う作業やアーカイブ、ファイルの圧縮といったファイルシステムの操作関係とパッケージのインストールについて説明されています。
ハードディスクの増設関係(mount)は参考サイトをご紹介するのみにし、ここでは割愛します。アーカイブや圧縮、インストールの部分はコマンドのみ引用してご紹介します。
マウントに関する参考サイト:Linuxのディスク管理|kazmax
※上記サイトで順を追って詳しく説明されています。ぜひ続きのページもご参照ください。
※ファイルシステムが何だったか、簡単に振り返りたい方は以前の記事をご参照ください。
以降、テキストから抜粋して引用していきます。(P.273)
アーカイブ
「複数のファイルやディレクトリを1つのファイルにまとめる」という作業を行う。
作成 | tar (オプション) (アーカイブファイル名) (ファイル1) (ファイル2)… |
確認 | tar -tf (アーカイブファイル名) |
追加 | tar -rf (アーカイブファイル名) (まとめたいファイル1,ファイル2,…) |
展開 | Tar -xf (アーカイブファイル名) |
ファイルの圧縮と展開
「ファイルやディレクトリを圧縮して小さくする」という作業を行う。
圧縮 | gzip (オプション) (ファイル名) |
展開(解凍) | gzip -d (ファイル名) |
インストール
2回目でちらっとLinuxのディストリビューションについて触れました。
各ディストリビューションは主に2つのパッケージに区分されるそうで、それがDebian形式とRPM形式で、例えばRedHat、CentOS、FedoraはRPM、devian、ubuntuはDebianにあたるそうです。
それぞれの形式で使用されるコマンドは次の通り。
パッケージ | RPM形式 | Debian形式 |
必要なものを自動的にそろえてインストール | yum ※これでNGな時はrpmを使用 | apt |
必要なものを自分で調べて手動でインストール | rpm | dpkg |
このテキストではCentOSを使用してきましたので、RPM形式のみ確認します。 以降、テキストから必要な部分だけ抜粋していきます。(P.293)
<yumを使う>
インストールされているパッケージを確認 | yum list |
パッケージを検索する | yum search パッケージ名 |
アップデートの確認 | yum check-update |
パッケージの情報を確認 | yum info パッケージ名 |
パッケージのインストール | yum install パッケージ名 |
パッケージのアップデート | yum update |
パッケージの個別アップデート | yum update パッケージ名 |
パッケージのアンインストール | yum remove パッケージ名 |
<rpmを使う>
パッケージファイルのインストール | rpm -ivh パッケージファイル名 |
パッケージファイルのアップデート (ない場合はインストール) | rpm -Uvh パッケージファイル名 |
パッケージファイルのアップデート | rpm -Fvh パッケージファイル名 |
パッケージのアンインストール | rpm -e パッケージ名 |
インストール済みの全パッケージファイル表示 | rpm -qa |
Debian系で使われるapt、dpkgについてはここでは割愛します。興味がある方は調べてみてくださいね。
最後は駆け足になってしまい申し訳ありませんが、これで昨年の4月からスタートしたLinux学習コラムは終了となります。
ここまでサーバ初心者なりに、検証環境を作り、テキストのコマンドを試し、それに関連して興味を持ったことを調べたり、聞いたりしてきました。私自身はサーバエンジニアやインフラエンジニアとして業務を行うわけではありませんが、知らないことを知る楽しみを持てただけでなく、今後、様々な方とお仕事をする際に役立つ知識を得られたと考えています。いい機会をいただき、ありがとうございました。
なお今後は、Pythonを使ったコラムを展開する予定です。ご興味のある方はぜひ引き続きお付き合いいただけますと幸いです。