在背景運行應用程式的優點是什麼?

在背景運行應用程式的優點是什麼?

我真不知道在後台運行應用程式有什麼好處。就像透過命令列
一樣。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 &

每當作業傳送到背景 shell 時,都會在此處顯示進程的job id和。pid如果我們希望進程返回前台,我們可以使用fg命令將其恢復。

$ fg 1
./job1.sh

但請注意,當您關閉終端機 (shell) 時,SIGHUP 將被傳送到從 shell 產生的所有背景進程,導致這些進程死亡。為了防止這種情況,您可以使用disown命令從作業表中刪除這些進程,從而防止進程被殺死。

最好的方法是使用命令啟動後台進程,nohup這樣 SIGHUP 訊號就不會終止該進程,並且它將在後台安全運行。

huponexit也可以透過設定bash shell 的選項來防止將 SIGHUP 傳送到子程序(bg 作業) 。

$ shopt -s huponexit

在最新版本的 Bash 中預設設定此選項,但如果未設置,我們可以新增此選項~/.bashrc以使其成為預設行為。

答案2

如果您執行一個需要 5 分鐘才能結束的應用程序,例如複製作業,那麼 shell 在程式運行時會被阻塞,整整 5 分鐘。然後,複製作業位於所謂的前台進程組中,由登入+指示ps。在那 5 分鐘內您可能需要做一些其他工作,但 shell 被封鎖了。

另一方面,當您在背景執行複製作業 ( cp source target &) 時,您的作業將在背景執行,而不會阻塞目前 shell。你可以繼續做其他事情。fg如果您願意,可以將進程帶回前台。

相關內容