【一通りわかる】Linuxでのジョブの基本的な扱い方まとめ

linuxジョブ
  • このエントリーをはてなブックマークに追加
  • Pocket

ジョブとは、コマンドやプログラムがまとまった、ひとかたまりの処理のことだ。

このページではLinuxのジョブ操作についてまとめている。基本的なことがまとまっているので、ジョブについて知りたいという方には参考になるだろう。

ジョブとは?

ジョブ

ジョブとは端末ごとに見た一連の処理のことだ。下記はすべてジョブにあたる。

$ command

$ (command; command)

$ command && command

プロセスが1つもしくは複数集まって1つのジョブができているイメージだと思ってほしい。

フォアグランドジョブとバックグランドジョブ

2種類のジョブ

ジョブには2種類ある。フォアグラウンドジョブとバックグランドジョブだ。

「フォアグランド」とは「前景」という意味になる。反対に「バックグランド」は「背景」という意味だ。

簡単な見分けかたとしては、「今操作しているアプリケーションはフォアグランドジョブ」それ以外は「バックグランドジョブ」である。

マルチタスクなのに意味あるの?

現代ではコンピュータは「マルチタスク」であることが当たり前になっている。複数の処理を同時に行うことができるわけだ。

では何故いちいち、フォアグランドジョブ、バックグランドジョブなどと分けてよんでいるのかというと「人間がシングルタスクだから」である。

例えば右の目と左の目で別々に読書することは出来ないはずだ。本を読むときは一冊ずつだ。例え複数の本を読書しようとしても、読む瞬間は一冊ずつしか読めない。

また絶対ではないがフォアグランドジョブは対話的であることが多いのに対して、バックグランドジョブは非対話的だ。

フォアグランドジョブを切り替える場合は、いったん処理を停止、もしくはバックグランドジョブとして移行させてから他の処理をフォアグランドに持っていくことになる。

WindowsなどをはじめとしたGUIなOSや、Linuxでもデスクトップ環境を搭載している場合、ウィンドウを頻繁に切り替えているはずだ。

少々広義な意味になるかもしれないが、これはフォアグランドジョブとバックグランドジョブとを、あなたは意識しないで切り替えていることになる。

CUI環境では?

ではCUI環境ではどうだろう? コンソール画面ではシェルと対話することになるが、一つのタスクを走らせ、作業をしているときに、もう一つタスクをコンピュータにお願いしたくなった場合どうするのか?

実行中のフォアグランドジョブを中止しなければならないのか?

安心してほしい。

その場合、一時停止してバックグランドにジョブを引渡し、バックブランドで処理再開、フォアグランドで他の作業に移行することができるようになっている。

もちろん最初からバックグランド処理としてジョブを走らせることも可能だ。GUI環境だとあたりまえな操作だがCUIだと少々とまどうかもしれないが実際にやってみて感覚をつかんでほしい。

実際にやってみよう

GUIの場合

GUIデスクトップ環境の場合非常に直感的である。

GUIでのジョブ

現在フォアグランドなのは「FireFox」でバックグランドなのは「端末」ということになる。フォアグランドジョブは常に一つだ。それ以外はバックグランドという扱いになる。

CUIの場合

今回のページは主にこのCUIでの操作説明がメインの部分だ。コンソールもしくは端末を立ち上げて実験してみてほしい。

簡単な例をあげると

$ sleep 1000

などとしてみる。

すると現在フォアグランドジョブとして「sleep」つまり「何もせずに待ってくれ」というコマンドを実行する。

今回は1000秒待ってくれという命令だ。しかしこれではフォアグランドはsleepコマンド実行中のため1000秒間何もできない。

そこでsleepコマンドを「バックグランドでお仕事をしてもらう」ことにする。とりあえず「Control+z」を押してみてほしい、すると以下の様になるはずだ。

ctlZ

「処理が一時停止」する。次に

$ jobs

jobs

とコマンドを実行する。いま一時停止しているジョブとその番号が表示されるはずだ。

そうしたら「bg」コマンドで処理をバックグランドに引きわたすことができる。次のように叩いてみていただきたい。

$ bg %<job番号>

bgコマンド

とすると、指定した処理がバックグランド処理へと切り変わる。

今回はジョブ番号1番を指定している。

逆にバックグランドジョブをフォアグランドジョブとして処理してほしいときは「fg」コマンドを使う、jobsコマンドでジョブ番号を確認「fg %<job番号>」で処理がフォアグランドへ引き渡される。

$ fg %<job番号>

fgコマンド

なお実行したいコマンドのあとに「&」をつけるとそのコマンドはバックグランドジョブとして処理される。例えば

$ sleep 1000 &

sleep &

などだ、バックグランドで走っている処理はjobsコマンドもしくはpsコマンドで確認できる。

sleep bg jobs

ちなみにfgコマンドとbgコマンドはシェルの組み込みコマンドであり、シェル自身がもっているコマンドである。

なので/binや/usr/binなどにコマンドがあるわけではないことに注意していただきたいちなみにjobsコマンドに「-l」 をつけるとプロセスIDを表示してくれる。

$ jobs -l

pid jobs

jobsコマンドオプション

jobsコマンドの各種オプションもご紹介しておこう。動いているjobが多ければオプションを使用してフィルタリングをすればいい。

  • -l プロセスIDを含めて表示する
  • -p プロセスIDのみ表示する
  • -r 実行中のジョブのみ表示する
  • -s 停止中のジョブのみ表示する

実行中のジョブを停止するには?

いくつか方法があるが、まずはひとつだけ知っておけばいいだろう。

killコマンドというものがあり、

$ kill %<job番号>

を用いることでジョブは停止できる。プロセスなどと一緒で、root以外では他人のジョブを停止することはできない。

まとめ

このページではLinuxのジョブ操作方法についてまとめてきた。

updatedbなど時間がかかるコマンドであればバックグランドで動かすことを癖にしておこう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リナックスアカデミーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リナックスアカデミーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する