LinuxC入門|Linuxにおけるジョブ管理の基本

Linux でコマンド操作をしていると、「この処理、ちょっと時間がかかりそうだな」「処理を動かしたまま、別の作業もしたいな」と思うことがありますよね。
そんなときに役立つのが、Linux におけるジョブ管理 という仕組みです。

ジョブ管理を理解すると、

  • 処理をバックグラウンドで動かす。
  • 一時停止した処理を再開する。
  • フォアグラウンドとバックグラウンドを切り替える。

といった操作が自由にできるようになります。

このページでは、ジョブ管理の基本的な考え方から、実際のコマンド操作までを、表や具体例を交えながらやさしく解説していきます。

スクリプトの準備

まずは、ジョブ管理を体験するための簡単なスクリプトを用意します。
このスクリプトは、60 秒待ってからメッセージを表示するだけのシンプルなものです。

すでに作成済みの場合は、この作業は不要です。

[suzuki@AlmaLinux ~]$ mkdir bin
[suzuki@AlmaLinux ~]$ nano bin/sleep.sh

スクリプトの内容は次のとおりです。

#!/bin/bash
sleep 60
echo "wake up!"

保存したら、実行権限を付与します。

[suzuki@AlmaLinux ~]$ chmod a+x bin/sleep.sh

このスクリプトを普通に実行すると、どうなるか見てみましょう。

[root@AlmaLinux ~]# bin/sleep.sh

60 秒後に wake up! と表示されますが、その間 このシェルでは他のコマンドを入力できません
このように、シェルを占有して実行される処理を フォアグラウンドジョブ と呼びます。

Linux では、実行中の処理を ジョブ という単位で管理しています。
ジョブには、次のような種類があります。

ジョブの種類

種類特徴
フォアグラウンドジョブシェルを占有して実行される。
バックグラウンドジョブシェルを占有せずに実行される。

既定では、コマンドはフォアグラウンドジョブとして実行されます。
バックグラウンドで実行したい場合は、コマンドの末尾に & を付けます。

では、sleep.sh をバックグラウンドジョブとして実行してみましょう。

[suzuki@AlmaLinux ~]$ bin/sleep.sh &
[1] 3273

このように表示されると、
・[1] はジョブ番号
・3273 はプロセス ID
を意味しています。

バックグラウンドで動いている間も、すぐに次のコマンドを入力できます。

60 秒経過すると、Enter キーを押したタイミングで次のように表示されます。

wake up!
[1]+  終了                  sleep.sh

現在実行中のジョブを確認するには、jobs コマンド を使います。

jobs コマンド

実行中、または停止中のジョブの一覧を表示します。

コマンド書式

jobs [オプション]

使用例

[suzuki@AlmaLinux ~]$ jobs

ジョブ番号や、実行中か停止中かといった状態を確認できます。

ジョブ管理では、一時停止(サスペンド) という操作もよく使われます。
実行中のフォアグラウンドジョブに対して、Ctrl + Z を押すと、そのジョブは一時停止します。

[suzuki@AlmaLinux ~]$ bin/sleep.sh
^Z
[1]+  停止                  sleep.sh

この状態では、ジョブは止まっていますが、終了はしていません。

一時停止したジョブは、bg コマンドや fg コマンドで再開できます。

bg コマンド

停止中のジョブをバックグラウンドで再開します。

コマンド書式

bg ジョブ番号

使用例

[suzuki@AlmaLinux ~]$ bg 1
[1]+ bin/sleep.sh &

fg コマンド

バックグラウンドジョブをフォアグラウンドに切り替えます。

コマンド書式

fg ジョブ番号

使用例

[suzuki@AlmaLinux ~]$ fg 1
bin/sleep.sh
wake up!

このように、ジョブを前面に戻して処理結果を確認することもできます。

ジョブ管理の基本操作

ここで、ジョブ管理に関する操作を整理してみましょう。

操作内容
コマンド実行フォアグラウンドジョブとして実行
コマンド &バックグラウンドジョブとして実行
Ctrl + Zジョブを一時停止
jobsジョブ一覧を表示
bgバックグラウンドで再開
fgフォアグラウンドに戻す

注意点として、通常のジョブはログアウトすると終了 します。
SSH 接続が切れたり、ログアウトした場合、実行中のジョブも止まってしまいます。

nohup コマンド

ログアウト後も処理を続けたい場合は、nohup コマンド を使います。
ログアウト後も、バックグラウンドでコマンドを実行し続けます。

コマンド書式

nohup コマンド &

使用例

[root@AlmaLinux ~]# nohup bin/sleep.sh &
[1] 3886
nohup: 入力を無視し、出力を 'nohup.out' に追記します

この状態でログアウトしても、処理は継続されます。

再ログイン後、結果は nohup.out に出力されています。

[root@AlmaLinux ~]# cat nohup.out
wake up!

ここまで見てきたように、ジョブ管理を理解すると、

  • 処理を止めずに別作業ができる。
  • 誤って止めた処理を再開できる。
  • ログアウト後も安全に処理を続けられる。

といった操作ができるようになります。

ジョブ管理は、Linux を快適に使うためのとても大切な基礎知識です。