Edited at

vagrant upをバックグラウンドで実行する

More than 3 years have passed since last update.


大枠の方針

PCであるソフトを開きながらも起動を待ちながら、別のソフトを開いて、そちらで作業をしている、というように、vagrantの起動時間も別のことをできるようにします。そのためにはバックグラウンドで起動させておく必要があり、その方法について書いていきます。


フォアグラウンドジョブとは?


LinuxやMac OS Xといったマルチタスク対応のOSにおいて、ユーザーが操作対象にできるジョブを「フォアグラウンド・ジョブ」といいます


まさにいま私はchromeを開いてQiitaでこの記事を書いているのですが、この場合フォアグラウンドジョブはchromeということになります。

スクリーンショット 2015-04-11 10.36.46.png


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


一方,操作対象になっていませんが、処理を継続しているジョブを「バックグラウンド・ジョブ」といいます。


chrome以外にもterminalやsublimeText、evernoteなどを開いていますが、こちらは私の操作対象になっておりませんので、バックグラウンドジョブということになります。

スクリーンショット 2015-04-11 10.36.17.png


linuxでやってみる

上記の説明はMac OS上でGUIだったので非常に直感的だったかと思いますが、Linux OSでやっていることも全く一緒です。

vimコマンドを実行してvimのバージョン情報を表示させる例をやってみます。


フォアグラウンドでvimのバージョン情報を表示させる

単にvimと打ち込めばvimのバージョン情報が確認できます。

[yusuke@Yusukes-MBP myLocalEnvironment]$ vim

スクリーンショット 2015-04-11 11.12.01.png

簡単ですね。


バックグラウンドでvimのバージョン情報を表示するジョブを実行する

バックグラウンドで実行するためにはコマンドの最後に&をつけます。

[yusuke@Yusukes-MBP myLocalEnvironment]$ vim &

スクリーンショット 2015-04-11 11.12.11.png

そうすると上の画像のように処理がバックグラウンドに周り、すぐに次の入力が可能な状況になっています。バックグラウンドにあるジョブをフォアグラウンドに持ってくるためにはfgコマンドを使います。

[yusuke@Yusukes-MBP myLocalEnvironment]$ fg 2

スクリーンショット 2015-04-11 11.12.34.png

これで確認することが出来ました。


標準出力を伴うジョブ

vagrant upのような標準出力を伴うジョブはバックグラウンドで起動させていても、出力が表示されてしまいます。

[yusuke@Yusukes-MBP myLocalEnvironment]$ vagrant up &

スクリーンショット 2015-04-11 11.43.55.png

この場合は出力先を標準出力から別のファイルへリダイレクトさせなくてはいけません。適当なファイルを作ってそちらへ出力させてもいいのですが、それだと起動するたびにファイルに書き込みがなされていって、無駄に容量を食うことになってしまいます。このようなときのために、いくら書き込んでも、書き込まれたデータを全て捨ててしまうスペシャルファイルのnullデバイスというものが存在します。


/dev/null(nullデバイスとも呼ばれる)は、Unix系オペレーティングシステムにおけるスペシャルファイルの1つで、そこに書き込まれたデータを全て捨て(write システムコールは成功する)、読み出してもどんなプロセスに対してもデータを返さない(EOFを返す)。DOSやWindowsではこれとほぼ同等な機能を提供するNULデバイス[1]がある。


ですので、今回は下記のように起動してやるとバックグラウンドで正常に処理が実行されます。

[yusuke@Yusukes-MBP myLocalEnvironment]$ vagrant up > /dev/null &

スクリーンショット 2015-04-11 11.50.27.png

上の画像のように起動中のすぐに他の作業に移れるようになっています。また実際に作業していても終了時にはしっかりアラートしてくれます。

スクリーンショット 2015-04-11 11.56.59.png


コマンド一覧

バックグラウンドやフォアグラウンド関連でよく使うコマンドは下記です。

コマンド
内容

&
コマンドに&をつけることでバックグラウンドで実行する

jobs
バックグラウンドで実行しているジョブの一覧

fg [ジョブ指定]
ジョブをフォアグラウンドに持ってくる

bg [ジョブ指定]
一時停止中のジョブをバックグラウンドで実行する

ctrl+Z
フォアグラウンド中のジョブを一時中断する

ctrl+C
フォアグラウンド中のジョブを終了する

kill [ジョブ指定]
ジョブを強制終了させる