前臺後臺進程轉換問題

進程的前臺和後臺

在linux中有程序在前臺和後臺切換的問題,前臺執行的會佔用終端,不能釋放比如ping命令。這樣的命令就可以放在後臺執行,前臺還能繼續執行其他操作。

看這個ping命令

[root@centos70 ~]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.181 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.091 ms
ls           
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.088 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.094 ms

上面我在執行ping命令的過程中輸入ls,但什麼都沒有輸出所以這就是前臺執行ping過程中在佔用前臺資源,ls是什麼都不會輸出的。而在命令後加個&,該命令就會在後臺執行,但是會在前臺顯示。

[root@centos70 ~]# PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.274 ms
pwd
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.087 ms

/root

上面我在ping的過程中執行pwd 這次卻執行了。但是ping命令也在執行,看着很不舒服但不影響輸入的命令換行也無影響。說了這麼多,不知道發現問題沒有。。。這個影響不到ping命令怎麼發送取消指令呢?

這下問題來了,想要終止ping我的方法是ps -ef|grep “ping”之後再用kill -9 跟上進程號殺死該進程就行了

[root@centos70 ~]# ps -ef |grep ping
root      27389  26574  0 13:20 pts/3    00:00:00 ping 127.0.0.1
root      27391  27317  0 13:20 pts/5    00:00:00 grep --color=auto ping
[root@centos70 ~]# kill -9 27389

在後臺運行的進程也有進程號,查看用jobs

[root@centos70 ~]# PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.084 ms
jo64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.065 ms
bs
[1]+  Running                 ping 127.1 &

上面代碼因爲後臺進程運行不停止,所以標準輸入會錯行。當我輸入jobs是出現running一行那個中括號裏面就是進程號。現在就要提及另一個命令了,fg空格跟上進程號可以吧後臺調回前臺,之後ctrl+c也可以終止該ping命令。

[root@centos70 ~]# ping 127.0.0.1 &
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.085 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.094 ms
jobs64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.093 ms                                                     64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.09664 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.095 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.094 ms
[1]+  Running                 ping 127.0.0.1 &
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.089 ms
fg 1
ping 127.0.0.1
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.086 ms
^C
--- 127.0.0.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms
rtt min/avg/max/mdev = 0.085/0.100/0.189/0.032 ms
[root@centos70 ~]#

上面雖然執行後臺運行,但是仍可以調回前臺。


下面搞了一張圖,如有雷同。好吧是我搜的wKioL1m00emD11bqAABIHdQySHs533.png

看圖說話,前臺運行直接快捷鍵就可以後臺休眠。

想要直接後臺,就是命令後跟     &

後臺休眠bg 加上進程號直接激活,後臺運行(命令中間有個空格)

後臺兩種情況都可以用fg來調到前臺。

還有!jobs查看後臺的進程號(可能不只有一種進程)


怎麼讓後臺運行的進程進入休眠呢?

在kill命令中有發信號這種用法,對應數字加進程可以修改狀態或殺死進程,這裏(kill -19 進程號)就是把後臺運行調到後臺休眠。其他數字什麼含義這裏就不再講解了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章