當前位置:成語大全網 - 書法字典 - Golang列表詞典

Golang列表詞典

壹般來說,進程的操作使用壹些系統命令,因此go使用os包來運行壹些系統命令。

操作系統包及其子包os/exec提供了創建進程的方法。

通常,應該首先使用os/exec包。由於os/exec包依賴於os包中密鑰創建過程的API,為了便於理解,我們先討論os包中與該過程相關的部分。

Unix :fork創建壹個進程(及其壹些變體,如vfork和clone)。

Go:用於在Go:Linux下創建進程的系統調用是clone。

允許壹個進程(父進程)創建壹個新進程(子進程)。具體來說,新的子進程幾乎是父進程的副本:子進程獲得父進程的堆棧、數據段、堆和執行文本段的副本。請將此視為將父進程壹分為二。

終止進程並返回所有資源(內存、文件描述符等)。)被進程占用到內核進行重新分配。參數status是壹個整數變量,表示進程的退出狀態。父進程可以使用系統調用wait()來獲取狀態。

有兩個目的:第壹,如果子進程沒有調用exit()終止,那麽wait將掛起父進程,直到子進程終止;其次,通過wait的status參數返回子流程的終止狀態。

將新程序(路徑名、參數列表argv、環境變量列表envp)加載到當前進程的內存中。這將丟棄現有的程序文本段,並為新程序重新創建堆棧、數據段和堆。這個動作通常被稱為執行新程序。

不是直接提供fork系統調用的封裝,而是將fork和executiveare結合起來提供syscall.ForkExec .如果您只想調用fork,則必須通過syscall自己完成。syscall(系統調用。sys _ fork,0,0,0。

Os。Process存儲有關StartProcess創建的進程的信息。

壹般情況下,Process的實例是由StartProcess創建的,函數聲明如下:

它使用提供的程序名、命令行參數和屬性啟動壹個新進程。StartProcess是壹個低級接口。os/exec包提供了壹個高級接口,因此應盡可能多地使用os/exec包。如果有錯誤,錯誤的類型將是*PathError。

屬性定義如下:

FindProcess可以通過pid找到正在運行的進程。此函數返回的進程對象可用於獲取有關底層操作系統進程的信息。在Unix系統中,即使pid對應的進程不存在,該函數也總是成功。

進程提供了四種方法:終止、信號、等待和釋放。其中,Kill和signal與信號有關,Kill實際上是調用Signal並發送SIGKILL信號以強制進程退出。以下章節將具體解釋這些信號。

釋演法用於釋放與流程對象相關的資源,以便將來可以重用這些資源。只有在確定沒有調用Wait時,才需要調用此方法。在Unix中,該方法的內部實現僅將進程的pid設置為-1。

您可以通過操作系統包運行外部命令,如上例所示。然而,Go標準庫為我們封裝了壹個更好的包:os/exec,在運行外部命令時應該首先使用它。它封裝了操作系統。StartProcess函數更容易地重定向標準輸入和輸出,使用管道連接I/O,並進行其他調整。

高管。LookPath函數在Path指定的目錄中搜索可執行程序。如果文件中有/文件,它只在當前目錄中搜索。該函數返回當前路徑的完整路徑或相對路徑。

func LookPath(文件字符串)(字符串,錯誤)

如果在路徑中找不到可執行文件,它將返回exec.ErrNotFound。

Cmd結構表示正在準備或執行的外部命令。調用Run、Output或CombinedOutput後,Cmd實例無法重用。

通常,Cmd實例應該通過exec生成。命令功能:

使用

獲得* Cmd實例後,通常有兩種方法來編寫它:

如前所述,有兩種方法可以在傳遞Cmd實例後運行命令。有時,我們不只是運行命令,還希望控制命令的輸入和輸出。通過上面的API介紹,有幾種方法可以控制輸入和輸出:

參考資料:

/The-Golang-Standard-Library-by-Example/chapter 10/10.1 . html