09-Linux & Virtual Box

Virtual Box & Linux(Part.20)| Linux プロセスの管理(2)| 現役エンジニア&プログラミングスクール講師

目標

「ps -lコマンド」と「topコマンド」(CPU利用状況)について理解する。
「freeコマンド」(メモリ利用状況)について理解する。
「プロセス管理のコマンド(プロセスの監視と終了)」について理解する。
「プロセス管理のコマンド(ジョブの管理)」について理解する。
「プロセスの優先度」について理解する。

プロセス管理のコマンド

プロセス管理のコマンド

プロセス管理のコマンド

psコマンド

システムで実行されているプロセスの情報を確認するコマンドです
文法:
ps [省略できるOP]
※OP:オプションのことです。
コマンドの参考資料はこちら

psは「Process Status」の略です。psコマンドにはいくつか種類があります。ここではLinuxで利用されるバージョンを取り上げています。オプションには「POSIXスタイル」と「BSD UNIXスタイル」があります。

ハイフンを利用するのが「POSIX」ハイフンがつかないのが「BSD UNIX」となっています。「POSIX」ではオプションに「-efl」、「BSD UNIX」ではオプションに「aux」を利用すると必要な情報のほとんどを出力することができます。

「POSIX」
「-e」:システム内の実行中の全てのプロセス情報を表示。
「-f」:プロセスの開始時間・ユーザー・親プロセスなどを表示。
「-l」:利用中のメモリ量・優先度を表示。

「BSD UNIX」
「a」:多ユーザーを含めた全てのプロセス情報を表示。
「u」:CPU使用率・メモリサイズ・プロセスの状態・PIDなど表示。
「x」:「a」と一緒に利用して制御端末に関係ないプロセスも表示。
「f」:親子関係をツリー状で表示

pstreeコマンドを利用するとプロセスの親子関係をツリー状で表示できます。

コマンド「ps -elf」の実行結果です。

[rocky001@rockylinux001 ~]$ ps -elf

表示の詳細は次のようになっています。

ヘッダーの名前情報の内容
SD(もしくはS):スリーブ中(割り込み不可)
R:実行状態もしくは実行可能状態
T:ジョブ制御によって一時的に停止
Z:親プロセスにステータスの報告が済んでいない終了プロセス
UIDプロセスを起動しているユーザー
PID/PPIDプロセスID / 親のプロセスID
Cプロセスを実行中のプロセッサID
PRIプロセスの優先度
NInice値
SZプロセスが利用中のメモリ容量
WCHANプロセスが完了を待つシステムコール
STIME (START)プロセスの開始日時
TTYプロセスが結びついている端末
TIMECPUの利用合計時間
CMD (COMMAND)実行中のコマンド

psコマンドに「f」オプションを利用するとプロセスの親子関係をツリー状で表示できます。

[rocky001@rockylinux001 ~]$ ps axf

実行結果

今度は「pstreeコマンド」を利用してプロセスをツリー状で表示してみます。オプションに「p」を利用するとPIDも追記してくれます。

[rocky001@rockylinux001 ~]$ pstree -p

最初のプロセス「init」が起動するまでには次のステップを踏んでいます。

  1. PCの電源をON
  2. ファームウェア(BIOSもしくはUEFI)が起動
  3. ファームウェアがブートローダー(GRUB)を起動
  4. ブートローダーがOS(Linuxカーネル)を起動
  5. Linuxカーネルがinitプロセスを起動

その後、initプロセスが子プロセスを起動

デーモンについてはTTYが「?」となっているものを確認します。

[rocky001@rockylinux001 ~]$ ps ajx

デーモン:ユーザーが立ち上げて開始され終了するプロセスを普通のプロセスとすれば、システムの開始から終了まで動き続けるようなプロセスを「デーモン(常駐プロセス)」と呼びます。

デーモンの特徴

  1. 端末が割り当てられない
  2. ログインセッションからの影響を受けない(ユーザーがログアウトしてもデーモンは終了しない)
  3. デーモンを生成したプロセスとは関係なくinitプロセスが親となる

topコマンド

プロセスの状態を定期的に取得して表示するコマンドです
文法:
top [省略できるOP]
※OP:オプションのことです。
コマンドの参考資料はこちら

オプションには次のようなものが利用されます。
「d」:表示の更新間隔を変更します。
「u」:ユーザーを指定して表示します。

topコマンドを終了する時は「q」を押下します。

[rocky001@rockylinux001 ~]$ top

実行結果は次のようになります。この画面を終了する時は「q」を押下します。

「q」を押下するとプロンプトが表示されます。

freeコマンド

メモリの利用状況を表示するコマンドです
文法:
free [省略できるOP]
※OP:オプションのことです。
コマンドの参考資料はこちら

freeコマンドはメインメモリ・スワップメモリの「使用」「未使用」の其々を表示します。オプションには次のようなものがあります。
「h」:単位を自動で変更します。
「s」:再出力の間隔を指定(ss.tt秒の単位)します。

[rocky001@rockylinux001 ~]$ free -h

実行結果

  • shared:複数のプロセスが共有するメモリ(/tmpなど)
  • buff/chche:直近のアクセス内容を保管している領域
  • available:現段階でCPUが利用可能なメモリの容量

killコマンド

現在実行しているプロセスを終了するコマンドです
文法:
kill [省略できるOP(シグナル名 or シグナルID)] プロセスID
※OP:オプションのことです。
コマンドの参考資料はこちら

シグナル(オプション)には次のようなものが利用されます。

シグナルシグナルID意味
HUP1端末から切り離されたことによる終了
INT2割り込みによる終了
KILL9強制終了
TERM15通常終了(デフォルト)
CONT18停止プロセスの再開
STOP19プロセスの一時停止

killコマンドではプロセスを終了する場合はプロセスIDを指定します。
その他にkillコマンドでバックグラウンドジョブを終了させることもできます。バックグラウンドジョブを終了する場合は「kill %ジョブ番号」とします。

jobsコマンド

実行中のジョブを確認するコマンドです
文法:
jobs [省略できるOP]
※OP:オプションのことです。

オプションには次のようなものが利用されます。
「l」:プロセスIDを追加して表示します。

ここではまずviエディタを立ち上げて「jobsコマンド」を利用してみます。(viのプロセスを起動)

[rocky001@rockylinux001 ~]$ ls
archiverocky dir1 hlrocky2.txt nusortrocky1.txt rocky1.txt rocky5.txt splitfileaa
cpslrocky2.txt dir2 linux3.txt nusortrocky2.txt rocky1.txt.gz rocky6.txt splitfileab
cpslrocky_optiond2.txt dir3 mergesplitfile.txt rocky.cpio rocky1copy.txt slrocky2.txt
[rocky001@rockylinux001 ~]$ vi rocky1.txt

viエディタが起動します。

この状態で「Ctrl+Z」を利用してジョブをサスペンドジョブ(一時停止のジョブ)にします。「Ctrl+Z」を押下します。

画面が次のように変わります。プロンプトが表示され「vi rocky1.txt」が「Stopped」となりました。この時の一番左の [ 1 ] となっている番号が「ジョブ番号」です。

ここで「jobsコマンド」を入力します。ジョブの内容が表示されます。

この状態から通常のviの処理に戻す場合は「fg 1」とコマンドを入力します。もし、バックグラウンドジョブを終了させたい場合はkillコマンドを利用できます。(killコマンドを利用しなければいけない場合があればこれを行いますが、別の手がないか本来は考えます。)ここでは例として開いているviエディタを強制終了させてみたいと思います。

ジョブを確認します。
[rocky001@rockylinux001 ~]$ jobs
[ 1 ] + Stopped vi rocky1.txt

killコマンドでジョブ [ 1 ] を強制終了します。
[rocky001@rockylinux001 ~]$ kill -9 %1

[ 1 ] + Stopped vi rocky1.txt

ジョブの状態を確認します。強制終了直後は「+Killed」となっています。
[rocky001@rockylinux001 ~]$ jobs
[ 1 ] + Killed vi rocky1.txt

フォアグラウンドジョブに移そうとしてもジョブがないと返されます。
[rocky001@rockylinux001 ~]$ fg 1
bash: fg: 1: no such job

再度ジョブを確認すると先ほどのジョブが消えています。
[rocky001@rockylinux001 ~]$ jobs
[rocky001@rockylinux001 ~]$

「フォアグラウンドジョブ」と「バックグラウンドジョブ」の切り替え

コマンドを通常で入力した場合はフォアグラウンドジョブとなりますが、コマンドに『「スペース」+「&」』を入力すると、そのコマンドをバックグラウンドジョブとして実行されます。

bgコマンド

フォアグラウンドジョブをバックグラウンドジョブに変更するコマンドです
文法:
bg ジョブ番号

実行中のフォアグラウンドジョブをバックグラウンドジョブに変更する場合は「Ctrl+Z」でフォアグラウンドジョブを一時停止します。その後にbgコマンドを利用してバックグラウンドジョブに変更(バックグラウンドジョブで実行するという意味)します。

先ほどのviエディタのプロセスをバックグラウンドジョブへ移行させる場合は「Ctrl+Z」を押して「bg 1」とするだけです。(意味のある操作ではありません。操作の例として捉えて頂ければと思います。)もしバックグラウンドジョブをkillコマンドで終了したい場合は「kill %1」と入力します。

fgコマンド

バックグラウンドジョブをフォアグラウンドジョブ変更するコマンドです
文法:
fg ジョブ番号

fgコマンドはbgコマンドと違って一時停止の処理は必要ありません。

フォアグラウンドジョブは「Ctrl+C」で強制終了することもできます。

プロセスには優先度があります。優先度の高いプロセス程、先に資源が割り当てられて処理が進みます。ここでは、この優先度を変更するコマンドを確認してみます。

niceコマンド

実行時にプロセスの優先度を変更するコマンドです
文法:
nice [-n ナイス値(優先度)] コマンド
コマンドの参考資料はこちら

プロセスのPRI(プライオリティ)は「ps -l」や「top」コマンドで確認ができます。PRIを変更する場合は変更の数値を「-20から19」の範囲で変更が可能です。但し負の数を設定できるのはルートユーザーのみとなります(数値が低いほど優先度は高くなります。)

reniceコマンド

実行中のプロセスの優先度を変更するコマンドです
文法:
renice ナイス値 [-p PID] [-u ユーザー名]
コマンドの参考資料はこちら

オプションには次のようなものが利用されます。
「-n ナイス値」:ナイス値を変更します。
「-p PID」:プロセスIDを指定します。
「-u ユーザー名」:ユーザー名を指定します。

今回は以上になります。

「Linux」おすすめ書籍6選【初心者・脱初心者用】| 現役エンジニア&プログラミングスクール講師「Linux」初心者の方がLinuxの操作や仕組みを理解するためのお勧めの書籍について取り上げています。また中級者として更に進んだ学習ができる書籍についても1冊取り上げています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
09-Linux & Virtual Box

Virtual Box & Linux(Part.10)| Linux テキスト処理(2)| 現役エンジニア&プログラミングスクール講師

2023年4月28日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.3)| Linux管理ツール「Cockpit」の有効化 | 現役エンジニア&プログラミングスクール講師

2023年4月21日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.4)| Linuxの概要と基本コマンド(ディレクトリ操作)| 現役エンジニア&プログラミングスクール講師

2023年4月23日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.15)| Linux ユーザー管理(3)| 現役エンジニア&プログラミングスクール講師

2023年5月7日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.9)| Linux テキスト処理(1)| 現役エンジニア&プログラミングスクール講師

2023年4月27日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
09-Linux & Virtual Box

Virtual Box & Linux(Part.19)| Linux プロセスの管理(1)| 現役エンジニア&プログラミングスクール講師

2023年5月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site