Linux bg fg命令的使用
阿新 • • 發佈:2020-07-29
背景
Linux下的fg和bg命令是程序的前後臺排程命令,即將指定號碼(非程序號)的命令程序放到前臺或後臺執行。比如一個需要長時間執行的命令,我們就希望把它放入後臺,這樣就不會阻塞當前的操作;而一些服務型的命令程序我們則希望能把它們長期運行於後臺。
命令
程序前後臺操作用到以下命令:
# 在前臺結束程序 Control+C # 在前臺暫停程序 Control+Z # 檢視後臺執行的程序 檢視程序號碼 jobs # 執行命令時,在命令末尾加上&可讓命令在後臺執行 & # 將命令程序號碼為N的命令程序放到前臺執行 fg processNum # 或者 %processNum # 將命令程序號碼為N的命令程序放到後臺執行 bg processNum
實操
我們在作業系統上實際演練一下,這裡用的環境是MacOS Catlina + zsh。
啟動一個需要長時間執行的程式,我們這裡選擇ping,每隔一定時間向特定網址傳送資料包並且輸出詳細資訊。
1. 啟動ping,一段時間後Ctrl + Z 暫停程式
yanximin@B000000120095D ~ % ping www.baidu.com PING www.a.shifen.com (61.135.169.125): 56 data bytes 64 bytes from 61.135.169.125: icmp_seq=0 ttl=55 time=0.995 ms 64 bytes from 61.135.169.125: icmp_seq=1 ttl=55 time=1.151 ms 64 bytes from 61.135.169.125: icmp_seq=2 ttl=55 time=1.005 ms 64 bytes from 61.135.169.125: icmp_seq=3 ttl=55 time=1.129 ms ^Z zsh: suspended ping www.baidu.com
2. jobs 檢視後臺程式
yanximin@B000000120095D ~ % jobs [1] + suspended ping www.baidu.com
3. fg 把程式放在前臺恢復執行
yanximin@B000000120095D ~ % fg %1 [1] + continued ping www.baidu.com 64 bytes from 61.135.169.125: icmp_seq=4 ttl=55 time=1.350 ms 64 bytes from 61.135.169.125: icmp_seq=5 ttl=55 time=1.070 ms 64 bytes from 61.135.169.125: icmp_seq=6 ttl=55 time=1.160 ms 64 bytes from 61.135.169.125: icmp_seq=7 ttl=55 time=1.108 ms
另外 這裡也可以直接用%1,不用加fg
yanximin@B000000120095D ~ % %1 [1] + continued ping www.baidu.com 64 bytes from 61.135.169.125: icmp_seq=16 ttl=55 time=1.114 ms 64 bytes from 61.135.169.125: icmp_seq=17 ttl=55 time=1.277 ms
4. 再使用Ctrl + Z 暫停程式,然後使用bg, 放在後臺繼續執行
yanximin@B000000120095D ~ % 64 bytes from 61.135.169.125: icmp_seq=18 ttl=55 time=1.112 ms 64 bytes from 61.135.169.125: icmp_seq=19 ttl=55 time=1.017 ms 64 bytes from 61.135.169.125: icmp_seq=20 ttl=55 time=1.318 ms 64 bytes from 61.135.169.125: icmp_seq=21 ttl=55 time=1.188 ms 64 bytes from 61.135.169.125: icmp_seq=22 ttl=55 time=0.952 ms 64 bytes from 61.135.169.125: icmp_seq=23 ttl=55 time=0.913 ms 64 bytes from 61.135.169.125: icmp_seq=24 ttl=55 time=0.949 ms 64 bytes from 61.135.169.125: icmp_seq=25 ttl=55 time=1.167 ms
這裡沒有重定向標準輸出,所以即使是後臺執行的,也會往終端列印。可以使用nohup和重定向,來做到真正的後臺執行
nohup ping www.baidu.com >log.txt 2>error.txt &
5. 最後使用ctrl + C 來結束程序
PING www.a.shifen.com (61.135.169.125): 56 data bytes 64 bytes from 61.135.169.125: icmp_seq=0 ttl=55 time=1.120 ms 64 bytes from 61.135.169.125: icmp_seq=1 ttl=55 time=0.981 ms 64 bytes from 61.135.169.125: icmp_seq=2 ttl=55 time=1.214 ms 64 bytes from 61.135.169.125: icmp_seq=3 ttl=55 time=1.003 ms 64 bytes from 61.135.169.125: icmp_seq=4 ttl=55 time=1.173 ms ^C --- www.a.shifen.com ping statistics --- 5 packets transmitted, 5 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.981/1.098/1.214/0.092 ms