バックグラウンドでアプリを実行すると、どのような利点があるのかわかりません。コマンドラインを介して同じです
。Application &
一体なぜバックグラウンドでアプリを実行するのですか?いつこの仕事をすることに決めるべきですか?
答え1
通常、実行に時間がかかりすぎてユーザーの対話を必要としないアプリケーションは、端末で作業を続けるためにバックグラウンドで送信されます。
バックグラウンドで実行されるジョブは、STDOUT、STDIN、およびSTDERRが異なることを除いて、フォアグラウンドで実行されるジョブと同じように処理されます。
ファイルの圧縮やバックアップなど、時間がかかる作業がある場合は、その作業をバックグラウンドで送信できます。
jobs
コマンドを使用して、バックグラウンドで実行されているジョブを一覧表示できます。
$ ./job1.sh &
[1] 9747
$ ./job2.sh &
[2] 9749
$ ./job3.sh &
[3] 9751
$ jobs
[1] Running ./job1.sh &
[2]- Running ./job2.sh &
[3]+ Running ./job3.sh &
ジョブがバックグラウンドシェルに送信されるたびに、プロセスの合計がここに表示されますjob id
。pid
プロセスを前景に戻すには、fg
コマンドを使用してプロセスを再開できます。
$ fg 1
./job1.sh
ただし、ターミナル(シェル)を閉じると、SIGHUPがシェルで作成されたすべてのバックグラウンドプロセスに送信され、そのプロセスが終了することに注意してください。これを回避するには、disown
コマンドを使用して作業テーブルからこれらのプロセスを削除して、プロセスが終了するのを防ぎます。
nohup
最良の方法の1つは、SIGHUP信号がプロセスを終了せずにバックグラウンドで安全に実行されるようにコマンドを使用してバックグラウンドプロセスを開始することです。
huponexit
bashシェルでオプションを設定して、SIGHUPが子プロセス(bgジョブ)に転送されるのを防ぐこともできます。
$ shopt -s huponexit
このオプションは、最新バージョンのBashでデフォルトで設定されていますが、設定されていない場合は、このオプションを追加してデフォルトの動作~/.bashrc
にすることができます。
答え2
レプリケーション操作など、完了するのに5分かかるアプリケーションを実行すると、プログラムの実行中にシェルが5分間ブロックされます。その後、レプリケーションジョブは login として+
表示されるいわゆるフォアグラウンドプロセスグループに配置されますps
。 5分間他の作業を行う必要があるかもしれませんが、シェルはブロックされました。
一方、cp source target &
バックグラウンド()でコピージョブを実行すると、現在のシェルをブロックせずにバックグラウンドでジョブが実行されます。別のことに進むことができます。fg
必要に応じて、プロセスを前景に戻すことができます。