成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 中的 & 詳解

系統 Linux
實際上,命令的用法并不難,例如 mkdir、touch 和 find 也分別可以簡單概括為“建立新目錄”、“更新文件”和“在目錄樹中查找文件”而已。

[[258591]]

實際上,命令的用法并不難,例如 mkdir、touch 和 find 也分別可以簡單概括為“建立新目錄”、“更新文件”和“在目錄樹中查找文件”而已。

但如果要理解

  1. mkdir test_dir 2>/dev/null || touch images.txt && find . -iname "*jpg" > backup/dir/images.txt & 

這一串命令的目的,以及為什么要這樣寫,就沒有這么簡單了。

關鍵之處就在于命令之間的連接符號。掌握了這些符號的用法,不僅可以讓你更好理解整體的工作原理,還可以讓你知道如何將不同的命令有效地結合起來,提高工作效率。

在這一篇文章和接下來的文章中,我會介紹如何使用 & 號和管道符號(|)在不同場景下的使用方法。

幕后工作

我來舉一個簡單的例子,看看如何使用 & 號將下面這個命令放到后臺運行:

  1. cp -R original/dir/ backup/dir/ 

這個命令的目的是將 original/dir/ 的內容遞歸地復制到 backup/dir/ 中。雖然看起來很簡單,但是如果原目錄里面的文件太大,在執行過程中終端就會一直被卡住。

所以,可以在命令的末尾加上一個 & 號,將這個任務放到后臺去執行:

  1. cp -R original/dir/ backup/dir/ & 

任務被放到后臺執行之后,就可以立即繼續在同一個終端上工作了,甚至關閉終端也不影響這個任務的正常執行。需要注意的是,如果要求這個任務輸出內容到標準輸出中(例如 echo 或 ls),即使使用了 &,也會等待這些輸出任務在前臺運行完畢。

當使用 & 將一個進程放置到后臺運行的時候,Bash 會提示這個進程的進程 ID。在 Linux 系統中運行的每一個進程都有一個唯一的進程 ID,你可以使用進程 ID 來暫停、恢復或者終止對應的進程,因此進程 ID 是非常重要的。

這個時候,只要你還停留在啟動進程的終端當中,就可以使用以下幾個命令來對管理后臺進程:

  •  jobs 命令可以顯示當前終端正在運行的進程,包括前臺運行和后臺運行的進程。它對每個正在執行中的進程任務分配了一個序號(這個序號不是進程 ID),可以使用這些序號來引用各個進程任務。
  1. $ jobs 
  2. [1]- Running cp -i -R original/dir/* backup/dir/ & 
  3. [2]+ Running find . -iname "*jpg" > backup/dir/images.txt & 
  •  fg 命令可以將后臺運行的進程任務放到前臺運行,這樣可以比較方便地進行交互。根據 jobs命令提供的進程任務序號,再在前面加上 % 符號,就可以把相應的進程任務放到前臺運行。

$ fg %1 # 將上面序號為 1 的 cp 任務放到前臺運行cp -i -R original/dir/* backup/dir/

如果這個進程任務是暫停狀態,fg 命令會將它啟動起來。

  • 使用 ctrl+z 組合鍵可以將前臺運行的任務暫停,僅僅是暫停,而不是將任務終止。當使用 fg 或者 bg 命令將任務重新啟動起來的時候,任務會從被暫停的位置開始執行。但 sleep[4] 命令是一個特例,sleep 任務被暫停的時間會計算在 sleep 時間之內。因為 sleep 命令依據的是系統時鐘的時間,而不是實際運行的時間。也就是說,如果運行了 sleep 30,然后將任務暫停 30 秒以上,那么任務恢復執行的時候會立即終止并退出。◈ bg 命令會將任務放置到后臺執行,如果任務是暫停狀態,也會被啟動起來。
  1. $ bg %1 
  2. [1]+ cp -i -R original/dir/* backup/dir/ & 

如上所述,以上幾個命令只能在同一個終端里才能使用。如果啟動進程任務的終端被關閉了,或者切換到了另一個終端,以上幾個命令就無法使用了。

如果要在另一個終端管理后臺進程,就需要其它工具了。例如可以使用 kill[5] 命令從另一個終端終止某個進程:

  1. kill -s STOP <PID> 

這里的 PID 就是使用 & 將進程放到后臺時 Bash 顯示的那個進程 ID。如果你當時沒有把進程 ID 記錄下來,也可以使用 ps 命令(代表 process)來獲取所有正在運行的進程的進程 ID,就像這樣:

  1. ps | grep cp 

執行以后會顯示出包含 cp 字符串的所有進程,例如上面例子中的 cp 進程。同時還會顯示出對應的進程 ID:

  1. $ ps | grep cp 
  2. 14444 pts/3 00:00:13 cp 

在這個例子中,進程 ID 是 14444,因此可以使用以下命令來暫停這個后臺進程:

  1. kill -s STOP 14444 

注意,這里的 STOP 等同于前面提到的 ctrl+z 組合鍵的效果,也就是僅僅把進程暫停掉。

如果想要把暫停了的進程啟動起來,可以對進程發出 CONT 信號:

  1. kill -s CONT 14444 

這個給出一個可以向進程發出的常用信號[6]列表。如果想要終止一個進程,可以發送 TERM 信號:

  1. kill -s TERM 14444 

如果進程不響應 TERM 信號并拒絕退出,還可以發送 KILL 信號強制終止進程:

  1. kill -s KILL 14444 

強制終止進程可能會有一定的風險,但如果遇到進程無節制消耗資源的情況,這樣的信號還是能夠派上用場的。

另外,如果你不確定進程 ID 是否正確,可以在 ps 命令中加上 x 參數:

  1. $ ps x| grep cp 
  2. 14444 pts/3 D 0:14 cp -i -R original/dir/Hols_2014.mp4 
  3.   original/dir/Hols_2015.mp4 original/dir/Hols_2016.mp4 
  4.   original/dir/Hols_2017.mp4 original/dir/Hols_2018.mp4 backup/dir/ 

這樣就可以看到是不是你需要的進程 ID 了。

***介紹一個將 ps 和 grep 結合到一起的命令:

  1. $ pgrep cp 
  2. 18 
  3. 19 
  4. 26 
  5. 33 
  6. 40 
  7. 47 
  8. 54 
  9. 61 
  10. 72 
  11. 88 
  12. 96 
  13. 136 
  14. 339 
  15. 6680 
  16. 13735 
  17. 14444 

pgrep 可以直接將帶有字符串 cp 的進程的進程 ID 顯示出來。

可以加上一些參數讓它的輸出更清晰:

  1. $ pgrep -lx cp 
  2. 14444 cp 

在這里,-l 參數會讓 pgrep 將進程的名稱顯示出來,-x 參數則是讓 pgrep 完全匹配 cp 這個命令。如果還想了解這個命令的更多細節,可以嘗試運行 pgrep -ax。

總結

在命令的末尾加上 & 可以讓我們理解前臺進程和后臺進程的概念,以及如何管理這些進程。

在 UNIX/Linux 術語中,在后臺運行的進程被稱為守護進程daemon。如果你曾經聽說過這個詞,那你現在應該知道它的意義了。

和其它符號一樣,& 在命令行中還有很多別的用法。在下一篇文章中,我會更詳細地介紹。

責任編輯:武曉燕 來源: Linux中國
相關推薦

2017-01-13 15:45:05

Linuxfork函數詳解

2010-01-13 09:56:26

linuxifconfig

2009-08-03 11:54:34

linux at命令linux at命令詳cron

2009-08-17 08:42:48

LinuxScreen命令使用技巧

2010-06-30 10:39:45

Linux SNMP

2022-05-09 08:55:58

Linuxdiff命令

2009-08-11 10:45:58

linux中du命令參linux命令行參數linux命令行

2011-05-24 15:48:24

linux軟路由路由

2009-08-16 20:08:28

linux中w命令參數w命令參數linux命令行參數

2009-12-25 15:39:54

Load averag

2009-08-16 19:43:07

linux中touchtouch命令linux命令行參數

2009-08-16 19:46:16

linux中ftp命令ftp命令參數linux命令行參數

2019-05-22 09:00:16

Linux虛擬文件系統

2023-12-21 13:59:41

2011-08-22 15:06:19

linux環境變量

2019-05-29 16:33:32

Linux虛擬系統

2009-12-23 10:36:48

Linux操作系統

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2009-12-14 11:08:07

Linux scp

2013-04-25 10:30:03

Linux系統文件權限
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩国产在线观看 | 91精品国产91久久久久久吃药 | 欧美激情综合网 | av第一页 | 欧洲国产精品视频 | www.99re | 人成在线| 免费国产精品久久久久久 | 一级欧美| 成人国产在线视频 | 国产中文字幕亚洲 | 国产传媒 | 亚洲一区二区三区免费在线观看 | 91久久| 在线观看国产h | 五月槐花香 | 四虎影院新网址 | 久久久.com| 成人毛片网 | 可以看黄的视频 | 中文一区二区 | 日韩一区二区av | www.亚洲一区二区三区 | 狠狠ri| 午夜精品福利视频 | 欧美精品国产精品 | 在线欧美日韩 | 日韩精品无码一区二区三区 | 一区二区日韩精品 | 亚洲九九 | 国产精品久久久久不卡 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 国产日韩精品一区二区 | 天天艹逼网 | 日韩精品无码一区二区三区 | 国产精品黄视频 | 一区二区三区韩国 | 日本手机在线 | www.日本精品 | 中文字幕视频免费 | 三区在线观看 |