As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

POSIX1日1コマンド[part9]: bg

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

bg

bg

とりあえず使ってみる

  • 事前準備
# カレントディレクトリのファイル確認
[vagrant@localhost 009]$ ls
file1  file2  file3
# 一秒ごとにlsした結果をlogに追記し、一定時間後に中断する。
[vagrant@localhost 009]$ while true; do ls; sleep 1s; done >> log_1
[Ctrl + C]
# ファイルの中身確認
[vagrant@localhost 009]$ cat log_1
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
  • jobを作る
# 1秒ごとにdateコマンドを実行
[vagrant@localhost 009]$ while true; do date; sleep 1s; done >> log_2      
^Z ([Ctrl + z]で一時停止しjobとして保持)
[1]+  Stopped                 sleep 1s

# 1秒ごとにlsコマンドを実行
[vagrant@localhost 009]$ while true; do ls; sleep 1s; done >> log_1
^Z [Ctrl + z]で一時停止しjobとして保持)
[2]+  Stopped                 sleep 1s

Ctrl+z-はSIGTSTPシグナルで、プロセスの一時停止を行うときに使う

  • jobの確認
# jobの確認
[vagrant@localhost 009]$ jobs
[1]-  Stopped                 sleep 1s
[2]+  Stopped                 sleep 1s

ふたつの停止しているjobがある。

  • バックグラウンドで実行するようにする。
[vagrant@localhost 009]$ bg 1
[1]+ sleep 1s &
[vagrant@localhost 009]$ jobs
[1]-  Done                    sleep 1s
[2]+  Stopped                 sleep 1s

バックグラウンドで実行されたことがわかる。(だが、継続処理はされない。)

  • 処理に時間がかかるもの

処理に時間がかかるものの場合どうか。 sleepで1000秒待ってみる。

[vagrant@localhost 009]$ sleep 1000
^Z
[vagrant@localhost 009]$ jobs
[3]+  Stopped                 sleep 1000
[vagrant@localhost 009]$ bg 3
[3]+ sleep 1000 &
[vagrant@localhost 009]$ jobs
[3]+  Running                 sleep 1000 &

バックグラウンドで実行(Running)されていることがわかる。

ざっくり使い方

bc [-l] [file...]

ざっくりDESCRIPTION

バックグラウンドでジョブを実行する。ジョブ制御が有効な場合(set -mの説明を参照)、bgユーティリティはバックグラウンドジョブとして実行することで、現在の環境(Shell Execution Environmentを参照)から中断したジョブを再開します。 job_idで指定されたジョブがすでに実行中のバックグラウンドジョブである場合、bgユーティリティは何の効果もなく、正常終了します。 bgを使用してバックグラウンドにジョブを配置すると、そのプロセスIDがあたかも非同期リストとして開始されたかのように、現在のシェル実行環境でプロセスIDが「知られている」ようになります。非同期リストを参照してください。

ざっくりOPTION

なし

ざっくりOPERANDS

bg job_id

再開するジョブをバックグラウンドジョブとして指定します。 job_idオペランドが指定されていない場合、直前に中断されたジョブが使用されます。 job_idの形式は、XBDのJob Control Job IDに記述されています。

ざっくりまとめ

Linux/Unixを使っていると、プロセスはよく目にすると思います。ジョブはどうでしょうか?
処理に時間がかかっている場合、別のターミナルを開きがちです。(SSHで新しくつなぐ)
みなさんはどうでしょうか?

実際にジョブを使うかは置いておいて、別の機会にジョブについて詳しく調べてみたいと思います。 それでは。