すべてを

▼開く

閉じる▲

コマンドをバックグラウンドで実行する

○アーカイブファイルをバックグラウンドで作成する

tarコマンドの最後に「&」を付けて実行する
$ tar -cf /tmp/masa_home.tar masa &
[1] 1455

tarコマンドで、オプション、ディレクトリ、ファイル名を指定し、最後にアンパサンド「&」を付ける。これでtarコマンドがバックグラウンドで実行される。

コマンドを実行した時に返ってくる「[1] 1455」の後の「1455」がプロセスIDで、プロセスを終了させたい時は、この番号を指定してkillコマンドを実行する。

普通にコマンドを実行すると、コマンドの実行に時間がかかる時はその間はプロンプトが返ってこないので何も操作ができない。そのような時に、時間のかかるコマンドをバックグラウンドで実行すればすぐに他の操作ができ、コマンドの終了を待つ必要が無くなる。

アンパサンド「&」は、コマンドをバックグラウンドで実行するシェルの機能。実行するコマンドの最後に付ける。シェルがこれを解釈してコマンドを実行する。

●バックグラウンドジョブにエラーが出た場合

tarコマンドをバックグラウンドで実行する
$ tar -cf /tmp/masa_home.tar masa &
[1] 1538
$ tar: masa/work/dir1~~/file1~: open 不能: 許可がありません
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました

[1]+  Exit 2                  tar -cf /tmp/masa_home.tar masa

バックグラウンドでコマンドを実行中にエラーが出た場合は、エラーメッセージが端末に表示される。

ログアウトしてもコマンドを終了させずに実行を継続する

○findコマンドでの検索をログアウトしても中断せずに実行し完了させる

nohupコマンドで検索を実行する
$ nohup find . -type d -empty -print > emp_dir &
[1] 1570

nohupコマンドで、実行させるコマンド「find . -type d -empty -print > emp_dir」を指定し、バックグラウンドで実行する「&」を付けて実行すると、コマンドがバックグラウンドで実行されて、ユーザがログアウトしても実行されているコマンドにハングアップシグナルが送られずにコマンドが最後まで実行される。

ただし、マシンがシャットダウンされれば実行が止まり、再起動してもそのコマンドが続けて実行されることはない。

標準出力と標準エラー出力は `nohup.out' へ追加書き込みモードでリダイレクトされる。

コマンド実行を途中で中止する場合は、killコマンドでプロセスを終了させる。プロセス番号は、コマンド実行時に表示される。この例の場合は「1570」がプロセス番号である。

実行した「find . -type d -empty -print > emp_dir」の意味

findコマンドで、カレントディレクトリ「.」にあるディレクトリのうちで空のディレクトリを検索し、表示する。その結果をファイル「emp_dir」に出力する。