このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:コマンドの一時停止と再開

コマンドの一時停止と再開

 Linuxシステムで作業をしていると、長時間実行するコマンドを一時的に中断し、他の作業を行いたい場合があります。そんなときに便利なのがジョブ制御です。ジョブ制御を使うことで、コマンドを一時停止したり、バックグラウンドで実行したり、再開したりすることが可能です。

 ここでは、実際の例を通じてコマンドの一時停止と再開の方法を解説します。具体的には、「bash のマニュアルページを読みながら、エディタで .bashrc ファイルを編集する」というシナリオで説明します。

ジョブ制御の例

ステップ1:man コマンドの起動

まず、man コマンドを使って bash のマニュアルを表示します。

user01@ubuntu:~$ man bash

man bashが表示されます。

BASH(1)               General Commands Manual              BASH(1)

NAME
       bash - GNU Bourne-Again SHell

SYNOPSIS
       bash [options] [command_string | file]

COPYRIGHT
       Bash  is Copyright (C) 1989-2020 by the Free Software Foun‐
       dation, Inc.
...(省略)...

 この状態で、マニュアルを閲覧中に .bashrc ファイルを編集したくなったとします。通常であれば、q を押して man を終了しますが、そうすると再度マニュアルを読みたいときに、最初からやり直す必要があります。

ステップ2:Ctrl + Z でコマンドを一時停止

そこで、Ctrl + Z を押して man コマンドを一時停止します。

[1]+  停止                  man bash
user01@ubuntu:~$
  • ^ZCtrl キーを押しながら Z を押したことを示します。
  • [1]+ 停止 man bash:ジョブ番号 [1]man bash が停止状態になったことを示します。

この操作により、man bash は一時停止され、シェルにコマンドを入力できる状態に戻りました。

ステップ3:エディタの起動

次に、エディタを起動して .bashrc ファイルを編集します。

user01@ubuntu:~$ nano .bashrc

nanoエディタで .bashrcが編集できるようになります。

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package ba>
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
...(省略)...

 しばらく編集を進めていると、再び bash のマニュアルを確認したくなるかもしれません。しかし、エディタを終了せずに同じように一時停止することができます。

ステップ4:エディタを一時停止

 nanoエディタがアクティブな状態で、Ctrl + tを押してコマンドを実行できるように切り替えます。次にCtrl + Z を押して一時停止します。

"fg" とタイプすることで nano を再開できます。

[2]+  停止                  nano .bashrc
user01@ubuntu:~$
  • メッセージ"fg" とタイプすることで nano を再開できます。 と表示されます。
  • [2]+ 停止 nano .bashrc:ジョブ番号 [2]nano .bashrc が停止状態になったことを示します。

ステップ5:ジョブの一覧を確認

現在のジョブを確認するには、jobs コマンドを使用します。

user01@ubuntu:~$ jobs
[1]-  停止                  man bash
[2]+  停止                  nano .bashrc
  • [1]-:ジョブ番号 [1]、次のジョブを示す - が付いています。
  • [2]+:ジョブ番号 [2]、カレントジョブを示す + が付いています。

ジョブ番号と対応するコマンドが一覧表示され、どちらも停止状態であることがわかります。

プロセスIDを含めて表示

プロセスIDも確認したい場合は、-l オプションを使用します。

user01@ubuntu:~$ jobs -l
[1]-  4437 停止                  man bash
[2]+  4452 停止                  nano .bashrc
  • 44374452:各ジョブのプロセスID(PID)です。

ステップ6:ジョブを再開する(fg コマンド)

 停止状態のジョブを再開するには、fg コマンドを使用します。fg は指定したジョブをフォアグラウンドで実行します。

【書式】
fg %<ジョブ番号>

例:man bash を再開

user01@ubuntu:~$ fg %1

 これで、ジョブ番号 [1]man bash がフォアグラウンドで再開されます。停止したときの状態(スクロール位置など)がそのまま復元されます。

ステップ7:再び nano を再開

man bash の確認が終わったら、Ctrl + Z で再度一時停止し、nano エディタを再開します。

[1]+  停止                  man bash
user01@ubuntu:~$ fg %2
  • fg %2:ジョブ番号 [2]nano .bashrc をフォアグラウンドで再開します。
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package ba>
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
...(省略)...

ステップ8:エディタの終了

 編集が完了したら、Ctrl + tを押してコマンドを実行できるように切り替えます。次にCtrl + X を押して nano エディタを終了します。

nano .bashrc
user01@Ubuntu1:~$

ジョブ制御コマンドのまとめ

コマンド説明
Ctrl + Zフォアグラウンドジョブを一時停止する。
jobs現在のジョブ一覧を表示する。
jobs -lジョブ一覧にプロセスIDを含めて表示する。
fg %<ジョブ番号>指定したジョブをフォアグラウンドで再開する。
bg %<ジョブ番号>指定したジョブをバックグラウンドで再開する。
kill %<ジョブ番号>指定したジョブを終了する。
Ctrl + Cフォアグラウンドジョブを強制終了する。
ジョブ制御コマンド

注意: fgbg コマンドでジョブ番号を省略すると、カレントジョブ(+ が付いたジョブ)が対象になります。

まとめ

  • ジョブ制御を活用することで、複数のコマンドを効率的に管理できます。
    Ctrl + Z でコマンドを一時停止し、シェルに戻ることができます。
    jobs コマンドで、現在のジョブの状態を確認できます。
    fg コマンドでジョブをフォアグラウンドで再開できます。
  • 一時停止再開を駆使することで、作業の中断と再開が容易になり、生産性が向上します。
  • ジョブ制御は、長時間実行するコマンドや複数の作業を同時進行する際に非常に便利です。

 ジョブ制御を理解し、適切に使用することで、Linux環境での作業効率を大幅に向上させることができます。ぜひ日々の業務で活用してみてください。