天天看點

linux fg 控制台輸入,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 暫停程式

[email protected] ~ % 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 檢視背景程式

[email protected] ~ % jobs

[1] + suspended ping www.baidu.com

3. fg 把程式放在前台恢複運作

[email protected] ~ % 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

[email protected] ~ % %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, 放在背景繼續運作

[email protected] ~ % 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