欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

3天內(nèi)不再提示

在shell中的多進程實現(xiàn)主要是一個什么

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

主要是介紹兩個部分,

pYYBAGL_N2eABiJGAABpNOD71vU324.png

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

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

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

pYYBAGL_N3yADaYTAACR63dGXO4493.png

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

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

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

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

我們運維開發(fā)主要是將我們這些手動的操作去寫成代碼,然后放到代碼,然后有代碼去幫我們執(zhí)行,??去實現(xiàn)操作的自動化,至少我們要能夠?qū)崿F(xiàn)就節(jié)約我們這些運維人員的時間。??

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

poYBAGL_N5KACcZMAACNGR--YYM056.png

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

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

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

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

poYBAGL_N6WACUXzAACRN5SBZlI933.png

循環(huán)的話主要就是for while和until這三個語句。??

在shell中的多進程,實現(xiàn)主要是一個什么?

pYYBAGL_N7qAc0rJAACQjwBwki8898.png

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

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

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

pYYBAGL_N8-AcODhAACqA9hEaIM475.png

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

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

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

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

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

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

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

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

pYYBAGL_N-OAYzvcAACqNQfDr5c137.png

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

pYYBAGL_N_eAdhRLAABxIFJ_JO4550.png

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

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

pYYBAGL_OAuASE1uAABTXUyHEKg024.png

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



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)

    關注

    4

    文章

    596

    瀏覽量

    27526
  • FTP
    FTP
    +關注

    關注

    0

    文章

    111

    瀏覽量

    40743
  • shell編程
    +關注

    關注

    0

    文章

    10

    瀏覽量

    5890
收藏 人收藏

    評論

    相關推薦

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

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

    實驗:編寫多進程程序

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

    Linux Shell多進程并發(fā)以及并發(fā)數(shù)控制

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

    labview有多進程嗎?

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

    多線程和多進程的區(qū)別

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

    淺談多進程多線程的選擇

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

    LINUX系統(tǒng)下多線程與多進程性能分析

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

    Zynq SoC上實現(xiàn)雙核非對稱的多進程處理模式

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

    進程控制開發(fā)之編寫多進程程序?qū)嶒灲馕?/a>

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

    使用Python多進程的理由

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

    Python多進程學習

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

    淺談Linux網(wǎng)絡編程多進程和多線程

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

    shell腳本實現(xiàn)并發(fā)多進程

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

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

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

    Python多線程和多進程的區(qū)別

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