Linuxの「ジョブ」って何だろう?“応用力”をつけるためのLinux再入門(14)

前回は「ps」コマンドを通じて、実行中のコマンドが「プロセス」として管理されている様子を見ました。今回は、シェルがコマンドを実行する際の単位である「ジョブ」とは何かを見ていくことにしましょう。

» 2017年07月07日 05時00分 公開
[西村めぐみ@IT]
「“応用力”をつけるためのLinux再入門」のインデックス

連載目次

Linuxの「ジョブ」とは?

 コンピュータに実行させる“作業のまとまり”を「ジョブ」と呼びます。例えば、コマンドラインでは「コマンドを入力して、[Enter]キーを押す」と、1つのジョブが実行されることになります。

 ただし、1つのジョブで実行されるのは、1つのコマンドとは限りません。コマンドラインで「ls」を実行した場合はlsコマンドだけが実行され、これで1つのジョブになります。「ls | more」と実行した場合は、lsコマンドとmoreコマンド、2つのコマンドが実行されますが、これも1つのジョブになります。

「バックグラウンドジョブ」とは?

 コマンドプロンプトでコマンドを入力して実行すると、通常はそのコマンドの処理が終了するまで次のプロンプトが表示されません。

 そこで、コマンドを「バックグラウンド」で実行させるようにすれば、すぐに次のコマンドを実行できるようになります。コマンドをバックグラウンドで実行させるには、コマンドの最後に「&」を付けて実行します。

 それでは、動作が分かりやすいX(X Window System)環境で試してみましょう。X環境の「端末」アプリケーションのコマンドラインから、「Firefox(コマンド名:firefox)」を起動して、動作を比較します。

 まずは、「firefox」と入力して起動した場合を見てみましょう。この場合、Firefoxを終了するまでプロンプトは表示されません(画面1)。端末で[CTRL]+[C]キーを押すとFirefoxが終了し、次のコマンドを受け付けるプロンプトが表示されます(画面2)。

画面1 画面1 Firefox(コマンド名:firefox)を起動した
画面2 画面2 [CTRL]+[C]キーを押すとFirefoxが終了し、プロンプトが表示された

 今度は、「firefox &」と入力して起動した場合を見てみましょう。Firefoxが起動しますが、プロンプトも表示されており、コマンドが入力可能な状態になっています(画面3)。画面内に表示されている「[1]」が「ジョブ番号」で、続く「5496」が「プロセスID」(本連載第13回参照)です。

画面3 画面3 Firefoxをバックグラウンドで実行。プロンプトも表示されており、すぐに次のコマンドを実行できる状態になっている

 なお、ジョブ番号は、シェル(今回の場合はbash)が「自分自身が実行しているジョブ」に付けている番号です。

 それでは、今度は「ps」コマンドを使って、この端末で実行中のプロセスを表示してみましょう(画面4)。プロセスID「5496」でFirefoxが実行中であることが分かります。また、現在実行中のジョブは「jobs」コマンドで確認できます。ジョブ番号[1]が実行中で、実行中のジョブはFirefoxであることが分かります。

画面4 画面4 psコマンドとjobsコマンドで、現在実行中のプロセスとジョブを確認

バックグラウンドジョブの活用

 昨今のLinuxであれば、X環境用のアプリケーションは「ランチャー」と呼ばれるツールや、「デスクトップ環境」に備わっているメニューから実行できます。以前は先ほどの説明のように、端末アプリケーションからコマンドラインで実行するのが一般的でした。

 このような場合は「&」を付けて実行することで、アプリケーションを起動しつつ、別のアプリケーションを起動したり、別のコマンドを実行したりすることができます。また、「コマンド名 & コマンド名 & コマンド名 &」のように指定することで、アプリケーションをまとめて実行することも可能です。

 例えば、CentOSでFirefoxと「辞書」を同時に起動するのであれば、「firefox & gnome-dictionary &」と指定します()(画面5)。このようなコマンドをエイリアスに登録しておくことで、よく使うアプリケーションをまとめて起動するという使い方も可能になります。

firefox & gnome-dictionary &

(Firefoxと辞書を同時に起動する)


画面5 画面5 Firefoxと辞書をバックグラウンドで起動

【※】動作を試す際のコマンド例なので、「gnome-dictionary」がない場合は他のアプリケーションや「firefox & firefox &」と指定しても試すことができます。なお、GNOME環境では、コマンドラインで「gnome-[TAB]キー」のように補完すれば、他のアプリケーションの起動コマンドが見つかるかもしれません。



「;」との違いを試してみよう

 “コマンドラインで複数のコマンドをまとめて実行する”という操作で、「;」を思い出した方もいるかもしれませんね。

 例えば、「&」を「;」に変えて「ls ; ls /」と指定すれば「ls」と「ls /」が実行されますが、これはコマンドラインで「ls」→[Enter]キー→「ls /」→[Enter]キーと順番に入力して実行していくイメージになります。

 先ほどの「firefox & gnome-dictionary &」の指定では、Firefoxの起動に続いて、すぐに辞書アプリケーションが起動しました。「&」を「;」に変えて「firefox ; gnome-dictionary ;」とすると、“Firefoxが終了してから辞書が起動する”という動作となります。

firefox & gnome-dictionary &

(Firefoxに続いてすぐに辞書が起動する)

firefox ; gnome-dictionary ;

(Firefoxを終了すると辞書が起動する)


 次回は、このバックグラウンドジョブをコマンドラインで試します。また、ジョブ操作用のコマンドについても解説します。


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。