コース一覧
Linux運用・管理
フォアグラウンドとバックグラウンド

Linux運用・管理

ユーザー権限、パーミッション、プロセス、ジョブ制御を学び、Linux上の実行中サービスと作業権限を安全に管理できるようにします。

1
パーミッションと権限管理
01. ユーザーとグループの概念5分
02. パーミッションの読み方5分
03. 権限の変更 chmod5分
04. 所有者の変更 chown5分
05. sudo - スーパーユーザーの力5分
06. 実行権限とスクリプト5分
07. パーミッションチェック5分
2
プロセス管理とジョブ制御
01. プロセスとは何か5分
02. psでプロセス一覧を確認する5分
03. topでリアルタイム監視する5分
04. プロセスの終了 kill5分
05. フォアグラウンドとバックグラウンド5分
06. nohupでログアウト後も実行する5分
07. プロセス管理チェック5分

フォアグラウンドとバックグラウンド

ビルドを流している間、その端末では何もできない

数分かかるコマンドを打つと、終わるまでプロンプトが戻ってきません。その間、同じ端末では調べ物も編集もできません。シェルがそのコマンドに端末の主導権を丸ごと渡しているからで、この状態をフォアグラウンドと呼びます。

主導権を渡さずに動かすこともできます。それがバックグラウンドで、プロンプトはすぐ戻ってきて、コマンドは裏で走り続けます。

末尾に & を付けて後ろに回す

ターミナル

$ ./build.sh &
[1] 12345
$ jobs
[1]+  Running    ./build.sh &

[1] がジョブ番号、12345 が PID です。ジョブ番号はそのシェルの中だけで通じる連番で、シェルを閉じると消えます。PID はマシン全体で一意なので、別の端末から触るときはこちらを使います。

jobs で、今のシェルが抱えているものを一覧できます。裏に回したジョブが全部終わるまで待ちたいときは wait が使えます。

打ってから気づいたときは Ctrl+Z

ターミナル

$ ./build.sh
^Z
[1]+  Stopped    ./build.sh
$ bg %1
[1]+ ./build.sh &

先に & を付け忘れても、打ち直す必要はありません。Ctrl+Z を押すとそのコマンドは一時停止して、プロンプトが戻ります。ここで bg と打てば、停止したところから裏で再開します。逆に、裏で動いているものに入力が必要になったら fg で手前に戻します。

Ctrl+Z は中断であって終了ではない、というのが大事なところです。押しただけの状態ではコマンドは止まったまま残っているので、そのままシェルを閉じようとすると警告が出ます。

裏に回した出力は、手元の作業に混ざる

ターミナル

$ ./build.sh > build.log 2>&1 &
$ tail -f build.log

裏で動いているプロセスも、標準出力はそのまま端末に流れてきます。何か打っている途中に割り込まれるので、まともに作業できません。ファイルに書き出しておいて、見たいときだけ tail -f で覗く形にすると落ち着きます。

2>&1 は、エラーの出力も同じファイルにまとめる指定です。これを忘れると、うまくいかなかったときの手がかりだけが端末に散らばって残ります。

解説

jobs が見えるのは、そのジョブを起動したシェルだけです。別の端末を開いて jobs を打っても何も出ません。他の端末から触りたいときは、ジョブ番号ではなく PID を使います。

課題

  1. sleep をバックグラウンドで 2 つ起動する
  2. wait で全ての完了を待つ

ヒント

& を付けてバックグラウンド起動する

wait は引数なしで全てのバックグラウンドジョブを待つ

jobs の出力はサンドボックスでは空のことがあるので、リダイレクトに留めると安全

script.sh
script.sh
エディタを読み込んでいます
ターミナル出力