成人免费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

2011-05-24 15:48:24

linux軟路由路由

2022-05-09 08:55:58

Linuxdiff命令

2009-08-11 10:45:58

linux中du命令參linux命令行參數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操作系統

2009-12-14 11:08:07

Linux scp

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2011-06-20 09:26:38

Linux qtopia QT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩欧美在线 | 亚洲精品一二三区 | 中文字幕免费在线 | 亚洲国产91 | 久久久久国产精品午夜一区 | 男人阁久久 | 日韩精品一区二区三区四区视频 | wwww.xxxx免费 | 欧美日韩中文在线观看 | 亚洲一区二区三区观看 | 久久亚洲春色中文字幕久久久 | 国产一区不卡 | 中文字幕在线欧美 | 成人一区二区三区在线 | av一二三四 | 夜夜骑首页| 久久久网 | 国产 日韩 欧美 在线 | 欧美性一级 | caoporn视频 | 999免费视频 | 91天堂网 | 国产色婷婷久久99精品91 | 亚洲国产二区 | 亚洲伊人精品酒店 | 91 在线| 久久精品成人 | 国产精品伦理一区二区三区 | 精品国产18久久久久久二百 | 永久www成人看片 | 亚洲视频在线免费 | 国产黄色网址在线观看 | 亚洲成在线观看 | 无码日韩精品一区二区免费 | 精品视频一区二区在线观看 | 国产69精品久久99不卡免费版 | 亚洲人成网亚洲欧洲无码 | 国产精品毛片一区二区三区 | 欧美在线一区二区三区 | 久久久精 | 综合久久99|