Linux bg fg命令的使用


背景

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

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM