Last Updated on 2021-05-17 by Clay
在 Linux 作業系統進行工作時,很多時候我們會希望能將一些工作放在背景執行,也就是即使關閉終端機、程式卻依然能在背景中執行。這樣有許多的好處,以下舉一個經典的例子:你現在人可能正在公司,使用公司的伺服器跑程式,但是馬上就要到五點了,準備要下班了,而你一點也不想留在公司等程式執行結束。
可是程式就是還沒跑完啊?怎麼辦?
這時候我們通常有好幾種選擇,比較不好的那種叫做『我管它的我先把程式中止回家睡覺先』。這當然不見得是最好的解決方法,畢竟當我們把『父程序』的 bash (Terminal) 關掉後,我們正在跑的『子程序』程式也被停止了。
所以,一旦當我們可慮到這個程式可能無法在我們預期的時間內執行完成時,其實我們便可以使用 "nohup"、"screen" 等等的指令來輔助我們執行程式 —— 這就是我今天想要紀錄的指令: 使用 "screen" 指令來讓我們的程式能在背景執行。
除此之外,使用 "screen" 指令可以讓我們將執行程式的 Terminal 關閉,並在需要查看程式的時候再以 "screen" 指令呼叫回程式的工作狀態。不過缺點是,如果今天程式沒有在 screen 裡面執行,並且執行到了一半,那麼我們是無法將其使用 "screen" 將其放入後台的。
目前為止不小心談了太多的概念,應該來看看實際使用指令的情境了。
"screen" 指令的使用方法
第一次使用的話,我們需要使用以下指令安裝 screen:
apt install screen
然後我們在 Terminal 當中,輸入 screen,然後 Enter。
screen
Output:
這時候我們會看到這樣的畫面,直接按 Enter 就會進入真正的 screen 了。
在 screen 當中,我們可以像是在平常的 Terminal 中一樣執行程式。比如說我執行一個不斷往上加的腳本:
這時候,我們可以將 Terminal 關閉。
重新打開 Terminal 後,我們可以使用以下指令查看現在沒有在運行的 screen 有幾個:
screen -ls
Output:
There are screens on:
594.tty3.DESKTOP (12/09/2019 07:02:23 PM) (Detached)
555.tty3.DESKTOP (12/09/2019 07:02:16 PM) (Detached)
515.tty3.DESKTOP (12/09/2019 06:57:18 PM) (Detached)
472.tty3.DESKTOP (12/09/2019 06:56:46 PM) (Detached)
424.tty3.DESKTOP (12/09/2019 06:54:23 PM) (Detached)
這裡我有 5 個 Detached 的 screen,然後我現在要連線到剛剛最後使用的、有無限迴圈的那個程式。
screen -r 594
這樣就可以連回最後產生的 screen 了!
Pingback: [Linux] 複製資料時顯示進度條 – DAST的部落格