【Linux】Linux命令行下多任務前后台切換


原文:https://my.oschina.net/huxuanhui/blog/13844

 

我們都知道,在 Windows 上面,我們要么讓一個程序作為服務在后台一直運行,要么停止這個服務。而不能讓程序在前台后台之間切換。而 Linux 提供了 fg 和 bg 命令,讓我們輕松調度正在運行的任務。

假設你發現前台運行的一個程序需要很長的時間,但是需要干其他的事情,你就可以用 Ctrl-Z ,掛起這個程序,然后可以看到系統提示(方括號中的是作業號):

[1]+ Stopped /root/bin/rsync.sh然后我們可以把程序調度到后台執行:(bg 后面的數字為作業號)#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在運行的任務:#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它調回到前台運行,可以用#fg 1
/root/bin/rsync.sh
這樣,你在控制台上就只能等待這個任務完成了。

 

fg、bg、jobs、&、ctrl + z都是跟系統任務有關的,雖然現在基本上不怎么需要用到這些命令,但學會了也是很實用的
一。& 最經常被用到
這個用在一個命令的最后,可以把這個命令放到后台執行

二。ctrl + z
可以將一個正在前台執行的命令放到后台,並且暫停

三。jobs
查看當前有多少在后台運行的命令

四。fg
將后台中的命令調至前台繼續運行
如果后台中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

五。bg
將一個在后台暫停的命令,變成繼續執行
如果后台中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

六。pgrep

執行並行任務時抓取后台運行進程的Pid

七。screen:在連接ssh或者在窗口下執行命令的時候,經常會遇到程序運行太長,可能在管理員要下班之前還無法運行結束,可以使用nohup或者screen命令將持續提交服務器后台運行,這樣,下次上班的時候,通過top命令會發現程序在一直運行(使用ssh重新登錄時使用ps、jobs命令無法發現我們上次登錄所下命令執行的進程)。

使用screen:

1.創建會話:最簡單的就是直接輸入screen回車,一個新會話就完成了(debian下會有提示,再按一次回車就可以了),但偶還是推薦用下面的命令來創建會話:

screen -S php

上面命令的意思就是新創建一個名為php的會話,這時你可以繼續輸入其它命令,如編譯php,費時很長,不用管它,喝杯茶先;
2.離開會話,按住鍵盤上的ctrl,然后依次按a和d,好了,又回到主會話了,這時你可以繼續創建其它會話或者執行其它命令,對我們創建的會話內容沒有任何影響,你甚至可以退出會話;
3.恢復創建的會話:如果還記得會話名稱,可以輸入命令:

screen -r php

上面命令的意思就是恢復名為php的會話,如果你只創建了一個會話,直接如入命令

screen -r

就可以恢復了,如果不記得會話名稱或者我直接輸入screen創建的會話,怎么辦呢,那就要用到下面的命令;
4.查看已經創建的會話:

screen -ls

上面的命令的意思就是查看本機已經創建的會話,可以查看會話的名稱和id,恢復時可以使用id代替名稱;
5.有時在恢復screen時會出現There is no screen to be resumed matching ****,遇到這種情況咋辦呢?輸入命令

screen -D -r ****

6.退出screen,使用screen會耗費一定的系統資源,所以當screen中的命令執行完畢之后,最好退出screen,直接輸入命令

exit

就可以退出了。
7.其它命令

 


免責聲明!

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



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