精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在shell中的多進程實現主要是一個什么

冬至配餃子 ? 來源:基根奮斗營 ? 作者:keagen ? 2022-08-19 15:14 ? 次閱讀

主要是介紹兩個部分,

pYYBAGL_N2eABiJGAABpNOD71vU324.png

shell編程的話它主要是有這樣三個特點, 第一個就是簡單高效, 第二個是功能強大, 第三個是可移植好。

因為他把我們的Linux的命令都放到shell編程里面,然后再通過加上循環加上判斷,然后實現這樣一個腳本, 這樣子的話我們就能夠去實現各種各樣想要的一些功能。

作為運維人員的話,我們編寫需要腳本是我們實現自動化的一個開始, 首先shell編程的話會有一個誤區,

pYYBAGL_N3yADaYTAACR63dGXO4493.png

我們最開始早期接觸shell編程的話,??我們覺得我們會把那些Linux命令直接就放到腳本里面,??它這樣的話我們最開始的就會認為shell編程 其實就是跟 Linux 命令堆在一起,??但是我們從shell編程的一個簡單的角度上考慮的話,它其實是Linux命令,還有再加上一些編程語法,?? 比如說我們給 Linux 命令加上一個什么 if 判斷,??如果說命令執行成功,我們才去執行下一個,或者說我們才輸出一個信息,??就是這樣的一個命令,再加上一些語法之后,就形成了這樣的一個shell腳本。??

下面這三個就是我們的經驗之談, 首先第一個就是運維的核心,就是在正確的節點上面去正確的去執行這些正確的Linux命令。??比如說我們要啟動某一臺節點上的某個服務,??對吧?我們要登錄到遠程登錄到這個節點上面,然后去執行把服務起來的一個動作,??或者說我們要執行把這個服務重新加載的一個動作,??然后運維工具的本質是什么?就是能夠遠程登錄到這臺節點上面去執行 Linux 命令,??這個是很多運維工具的一個基本功能。??

比如說我們后面用到的ansible和saltstack,它們都會有這樣的一個最基礎的功能,??這個也是我們作為使用者會經常使用的功能。??

然后運維開發是什么?就是說我們要把我們這些經常要登錄到某臺節點,??然后去做的某些采集數據的動作,或者說發郵件通知,如果說有節點異常,我們要報警,??我們會把這些動作,我們以前要手工操作的這些步驟,全部用寫成代碼,寫成腳本,??我們通過 Python運行一下腳本,或者說寫成shell或者說寫成放到定時任務里面去定時執行,??這樣的話我們就實現了自動化的開發。??

我們運維開發主要是將我們這些手動的操作去寫成代碼,然后放到代碼,然后有代碼去幫我們執行,??去實現操作的自動化,至少我們要能夠實現就節約我們這些運維人員的時間。??

好,關于shell編程中的一些重要概念,其實跟大部分的編程語言是一樣的,??所以我們要看到shell編程中也有變量的,

poYBAGL_N5KACcZMAACNGR--YYM056.png

變量定義,還有字符串的一些操作,還有數組還有判斷計算,??計算的話就是簡單的加減乘除,然后還有浮點運算等等,還有在需要shell里面也會有函數的概念。??

此外的話shell的函數和我們其他高級語言的函數,比如說Python或者說C,C++這些函數它是不一樣的,??它的傳參是比較特別的,我們是通過位置參數去傳。??

接下來的話我們會在shell編程的實戰中看到這一點,然后參數的話它其實會分什么?函數的參數??和腳本的參數都統一稱之為位置參數。??

接著的話還有循環,我們最核心的就是要實現叫多進程的操作。??好,在shell中判斷條件,還有循環語句,這些都是最基本的判斷語句,最基本的就是if。

poYBAGL_N6WACUXzAACRN5SBZlI933.png

循環的話主要就是for while和until這三個語句。??

在shell中的多進程,實現主要是一個什么?

pYYBAGL_N7qAc0rJAACQjwBwki8898.png

要實現這樣一個后臺執行服務,??我們一個操作或者說我們調用一個函數,我們在操作后面加上& 的符或者說與符的時候,??這個操作或者說這個函數它里面的任務就會放到后臺去,自動去起一個進程去執行,但是它會存在一個問題,??假設我有100個這樣的操作,我每一個操作都加上& ,??這樣的話后臺就會起100個進程分別去執行這些動作,這樣的話我們是沒有辦法去控制進程數的。??

如果說假設我們的任務有1萬個,??我們真的能夠在一臺節點上面去1萬個進程去執行這些操作嗎???這樣子的話效率其實是會急劇下降的,因為進程之間的一個開銷其實也是非常大的一個開銷,??它也會占用大量的時間,甚至會導致這個節點無法執行。

我們需要去控制每次啟動的進程數,??控制進程數的一個核心就是通過這個叫文件描述符和管道配合執行,??它是怎么樣執行,我這里就畫了這樣一個圖。??

pYYBAGL_N8-AcODhAACqA9hEaIM475.png

我們首先看一下這個管道,管道的一個特點就是說我這邊管道里面假設有10個數據,??我如果說想從管道里面讀取一個數據的時候,這個時候管道里面是不是減少了一個??,假設我這個管道里面沒有數據,我讀的時候我這個操作想從管道里面去讀一個操作,??這個時候這個操作其實會阻塞在這里,它就不會返回,它就會一直阻塞到這里,直到什么時候返回,直到我從有另外一個操作像管道里面去寫入一個字符串的時候,??這邊阻塞的操作就能夠立馬收到這個字符串,然后它這個操作就會返回,??

這樣子我們怎么樣實現控制最大進程數,那就很簡單,比如說我們管道里面有三個字符,本身有三個字符串,??3個帶換行的字符串,我們寫入管道里面3個字符串之后,假設我們有10個任務,這個時候我們作為第一個任務的話,在執行這個任務之前,我要向管道里面去讀取一個字符串,??讀了一個字符串之后,接著我就把這個任務放到后臺去執行,就加上與這個符號&,那是不是第一個就正確執行了???

然后讀取了第一個任務之后,這個時候管道里面是不是只有兩個字符,?? 接著再來,第二個任務的時候是不是要又向管道里面再取一個字符,第三個取,??然后等到第四個的時候,這個管道里面是不是已經沒有字符了???

這個時候這個系統里面其實已經相當于是啟動了三個進程,?? 但是第四個任務在執行的時候,它由于沒有辦法返回,??因為它讀這個管道里面的字符串它讀不到,??然后它這個任務就會阻塞在這里,后面要放到后臺去執行的任務就沒有辦法執行,??所以它就會一直阻塞在上面讀的操作里面。??一旦我們這個時候我們的系統里面是有三個進程去執行任務,??我們在這個任務的最后,也就是說任務執行完了,??但是它的最后需要做一個什么操作,它需要向管道去寫入這樣一個字符串。

也就是說你的任務執行成功了,??我最后的話要向管道里面去寫,??相當于是把我原來消耗掉的一個任務,把消耗掉的一個字符串再把它寫回到管道里面。??這個時候當我這個任務執行結束之后,管道這個時候又多了一個字符串,??原來阻塞在這里的任務是不是突然之間就是有字符串進來了,我就立馬去讀取這個字符串,??接著又會有一個新的任務,就會啟動一個新的進程去執行一個任務。??

想象一下??,是不是一個管道里面反正有三個字符串對吧?我們依次去讀,這三個字符串讀完了之后,第四個任務進來的時候就會阻塞在這里,??然后等到每一個任務去執行完了之后,他就會把這個字符串重新再寫回到這管道里面,??這樣子就能夠保證這個系統里面最多只有三個進程在執行。??第四個進程的時候是因為它??管道里面是沒有字符串的,所以說它永遠會阻塞在這里。直到一個任務結束之后,管道里面有了字符串,第四個任務才能去執行。??

這個時候系統里面還是只有三個,因為上一個已經結束了對不對,??這樣的一個原理,就是shell編程里面控制最大進程數的原理,就是通過這樣一個管道實現的,??后面我們也會通過這個原理來去自己手動編寫控制多進程的一個shell腳本。??

最后的話我們還會展示兩個案例,幫助大家去理解shell編程,??它在生產上是怎么用的。

pYYBAGL_N-OAYzvcAACqNQfDr5c137.png

最后的話我們還會給大家演示一下關于磁盤和邏輯卷的管理。??

pYYBAGL_N_eAdhRLAABxIFJ_JO4550.png

這是為了我們后面在做一些Python代碼的時候,我們要做一些操作,我們要建一個邏輯卷,建一個卷了之后,比如說我們??有一個的 1 g的目錄, 我們想給它建1 g 的空間,有一個1 g的空間之后,然后我想把磁盤把它寫滿,??就是說為了方便我們后續去做一些操作,然后做這些操作的時候,我們要能夠理解磁盤,??一個20g的磁盤是怎么樣把20g的磁盤能夠切成一個1 g的小磁盤,然后一個小邏輯卷,??然后把小邏輯卷然后拿來使用,這是Linux運維里面的一些基礎知識。??

最后的話我們會來搭建一下兩個Linux的一個基礎服務,??

pYYBAGL_OAuASE1uAABTXUyHEKg024.png

在搭建這個服務過程中我們通過的比如說我們這個FTP服務我們會自己動手去實現一個shell腳本,??那就是實現一鍵部署 FTP服務的一個腳本。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux系統
    +關注

    關注

    4

    文章

    592

    瀏覽量

    27357
  • FTP
    FTP
    +關注

    關注

    0

    文章

    108

    瀏覽量

    40596
  • shell編程
    +關注

    關注

    0

    文章

    10

    瀏覽量

    5874
收藏 人收藏

    評論

    相關推薦

    跪求LabVIEW多進程問題,謝謝各位

    進行處理。但是這樣就不是多線程并行了,相當于幾個站點是順序執行的,就像讀取數據時候就是先讀第一個站點的數據放進第一個隊列,再讀第二站點的數據放進第二隊列......這樣,我想這樣點
    發表于 04-04 16:34

    實驗:編寫多進程程序

    1.實驗目的 通過編寫多進程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數的使用,進步理解Linux
    發表于 09-05 15:32

    Linux Shell多進程并發以及并發數控制

    Linux Shell多進程并發以及并發數控制1. 基礎知識準備1.1. linux后臺進程Unix是多任務系統,允許多用戶同時運行多個
    發表于 08-28 15:53

    labview有多進程嗎?

    labview有多進程嗎?
    發表于 02-03 17:13

    多線程和多進程的區別

    6.你的數據庫會又500連接數,會有10,你分析下情況7.udp和tcp的區別8.多線程和多進
    發表于 07-19 07:21

    淺談多進程多線程的選擇

    魚還是熊掌:淺談多進程多線程的選擇關于多進程和多線程,教科書上最經典的句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”,這句話應付考試基本上夠了,但如果在工作
    發表于 08-24 07:38

    LINUX系統下多線程與多進程性能分析

    采用多進程處理多個任務,會占用很多系統資源(主要是CPU 和內存的使用)。LINUX ,則對這種弊端進行了改進,在用戶態實現了多線程處理
    發表于 08-13 08:31 ?20次下載

    Zynq SoC上實現雙核非對稱的多進程處理模式

    我的上篇博客我介紹了利用Zynq SoC上的兩ARM Cortex-A9 MPCore處理器執行不同的任務程序,實現非對稱的
    發表于 02-11 10:08 ?2338次閱讀
    <b class='flag-5'>在</b>Zynq SoC上<b class='flag-5'>實現</b>雙核非對稱的<b class='flag-5'>多進程</b>處理模式

    進程控制開發之編寫多進程程序實驗解析

    7.4.1 編寫多進程程序 1.實驗目的 通過編寫多進程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數的使用,進步理解Linux
    發表于 10-18 16:33 ?0次下載
    <b class='flag-5'>進程</b>控制開發之編寫<b class='flag-5'>多進程</b>程序實驗解析

    使用Python多進程的理由

    Python 是運行在解釋器的語言,查找資料知道, python 中有全局鎖( GI),使用多進程( Threa)的情況下,不能發揮
    的頭像 發表于 04-04 16:50 ?1579次閱讀
    使用Python<b class='flag-5'>多進程</b>的理由

    Python多進程學習

    ) 技術不同,因為多線程的并發任務依賴于 GIL (Global Interpreter Lock)。多進程,每個
    的頭像 發表于 04-26 11:04 ?527次閱讀

    淺談Linux網絡編程多進程和多線程

    Linux網絡編程,我們應該見過很多網絡框架或者server,有多進程的處理方式,也有多線程處理方式,孰好孰壞并沒有可比性,首先選擇多進程還是多線程我們需要考慮業務場景,其次結合當
    發表于 08-08 16:56 ?805次閱讀
    淺談Linux網絡編程<b class='flag-5'>中</b>的<b class='flag-5'>多進程</b>和多線程

    shell腳本實現并發多進程

    Shell腳本實現并發多進程可以使用以下方法: 使用符號來將其放入后臺執行,從而實現并發
    的頭像 發表于 11-08 10:20 ?1268次閱讀

    你還是分不清多進程和多線程嗎?文搞懂!

    你還是分不清多進程和多線程嗎?文搞懂! 多進程和多線程是并發編程中常見的兩概念,它們都可以用于提高程序的性能和效率。但是它們的實現方式和
    的頭像 發表于 12-19 16:07 ?540次閱讀

    Python多線程和多進程的區別

    Python作為種高級編程語言,提供了多種并發編程的方式,其中多線程與多進程是最常見的兩種方式之本文中,我們將探討Python多線
    的頭像 發表于 10-23 11:48 ?338次閱讀
    Python<b class='flag-5'>中</b>多線程和<b class='flag-5'>多進程</b>的區別