前臺後臺進程轉換問題
進程的前臺和後臺
在linux中有程序在前臺和後臺切換的問題,前臺執行的會占用終端,不能釋放比如ping命令。這樣的命令就可以放在後臺執行,前臺還能繼續執行其他操作。
看這個ping命令
[[email protected] ~]# 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是什麽都不會輸出的。而在命令後加個&,該命令就會在後臺執行,但是會在前臺顯示。
[[email protected] ~]# 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 跟上進程號殺死該進程就行了
[[email protected] ~]# 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 [[email protected] ~]# kill -9 27389
在後臺運行的進程也有進程號,查看用jobs
[[email protected] ~]# 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命令。
[[email protected] ~]# 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 [[email protected] ~]#
上面雖然執行後臺運行,但是仍可以調回前臺。
下面搞了一張圖,如有雷同。好吧是我搜的
看圖說話,前臺運行直接快捷鍵就可以後臺休眠。
想要直接後臺,就是命令後跟 &
後臺休眠bg 加上進程號直接激活,後臺運行(命令中間有個空格)
後臺兩種情況都可以用fg來調到前臺。
還有!jobs查看後臺的進程號(可能不只有一種進程)
怎麽讓後臺運行的進程進入休眠呢?
在kill命令中有發信號這種用法,對應數字加進程可以修改狀態或殺死進程,這裏(kill -19 進程號)就是把後臺運行調到後臺休眠。其他數字什麽含義這裏就不再講解了。
本文出自 “mlon客” 博客,請務必保留此出處http://13154101.blog.51cto.com/13144101/1964095
前臺後臺進程轉換問題