iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
1

前言

昨天已經完成逐行讀取並且 echo,接下來原本應該要講執行指令,但因為需要一些先備知識,所以今天先來說說 Linux 中 Process 跟 Standard IO 的觀念

Process

在 Linux 裡面,每個跑起來的程式都是一個獨立的 Process,譬如說你正在播音樂的 Spotify 是一個 Process、你正在用的 Line 也是一個 Process,所有執行中的程式都是以 Process 的形式存在於系統中。當然 Process 之間也能分工合作一起達成任務,像 Chrome 瀏覽器就會一次開超級多 Process,所以才會吃那麼多記憶體XD

ps

如果想看系統內有哪些 Process 正在跑可以下 ps auxps 指令是 Process State 的縮寫,aux 則是要顯示所有使用者(包括系統)正在執行的 Process

top & htop

top 指令則是可以用來看現在的 CPU 使用率、最耗資源的 Process,以我的電腦為例,最耗資源的前幾名馬上就有 Google Chrome,消耗資源的量果真是名不虛傳XD

如果嫌 top 不夠好看、不好操作的話可以安裝 htop,我個人覺得他比 top 的資訊更清楚,像我的電腦有八核心他就會顯示出各個核心的使用率,最底下的 F1 到 F10 還有各種功能可以使用,包括排序、搜尋、樹狀圖等等(下圖可以看到 Chrome 開了超多 Process 在分工合作,到底是在忙什麼 ???)

至於要怎麼在 Go 裡面啟動一個新的 Process,這個明天會說XD

Standard IO(Input/Output)

有了 Process 的觀念之後接著來說說 Standard IO,在 Linux 裡面,每個 Process 在執行時都會有自己輸入與輸出的資料流,分別是 Stdin、Stdout 跟 Stderr

  • Stdin(Standard Input)

    Stdin 是程式用來讀取資料的資料流,Process 如果要跟使用者互動的話通常會從 Stdin 讀取資料,預設是從終端機進行讀取

    以下面這個例子來說,當我終端機輸入 print(1 + 1) 並按下 Enter 時,python Process 會從 Stdin 讀到我的輸入,並做適當的處理

    若我輸入的內容不合 Python 的語法,那他就會錯出錯誤訊息說「你放在 stdin 裡面的字串不合語法」,所以可以看出他確實是從 Stdin 讀取資料

  • Stdout(Standard Output)

    Stdout 是程式用來輸出結果的資料流,預設是對應到終端機

    同樣以這個例子來說,當 python Process 算出 1 + 12 之後會輸出(print)到 Stdout,所以才會在終端機看到 2

  • Stderr(Standard Error)

    Stderr 這個資料流比較特別,它專門用來輸出錯誤或是提示訊息,預設也是輸出到終端機。以同一個例子來說,它噴出的錯誤訊息就是輸出到 Stderr

Redirect

前面有說到 Stdin 預設是從終端機讀取資料、Stdout 預設是輸出到終端機,但那只是預設,他們其實可以被重新導向的

Redirect Stdin(<)

以下面這個例子來說,我可以先新增一個檔案寫好我要輸入的內容 print(1 + 1),接著使用 < 這個 Redirect Operator 進行重新導向,把資料餵到 Process 的 Stdin 裡面去,這樣一來 python Process 就會在他的 Stdin 收到 print(1 + 1) 並且輸出 2,跟我手動輸入 print(1 + 1) 的效果是一樣的

Redirect Stdout(>)

跟 Stdin 的 < 符號相反,> 是用來重新導向 Stdout,而且他們可以同時使用,譬如說可以下 python < data > result 把 data 檔案內的資料重新導向到 Stdin,並且把執行後的結果重新導向到 result,就可以看到 result 檔案裡面的內容是 2

小結

關於基本的 Process 跟 Standard IO 概念就講到這邊,記得每個跑起來的程式都是一個 Process,而且每個 Process 都會有各自的 Standard IO,這個觀念在明天會用到

如果對於 Process 跟 Standard IO 還有什麼疑問的話歡迎在下方留言,沒有的話就明天見囉~

延伸閱讀


上一篇
Day03-開工囉
下一篇
Day05-執行指令(一)
系列文
Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言