欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言獲取進程pid,go創(chuàng)建進程

golang 進程創(chuàng)建,fork,以及熱重啟(無縫升級)

一般來說,進程的操作使用的是一些系統(tǒng)的命令,所以go內(nèi)部使用os包,進行一些運行系統(tǒng)命令的操作

創(chuàng)新互聯(lián)建站是一家專業(yè)提供雙峰企業(yè)網(wǎng)站建設,專注與網(wǎng)站建設、成都網(wǎng)站制作html5、小程序制作等業(yè)務。10年已為雙峰眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。

os 包及其子包 os/exec 提供了創(chuàng)建進程的方法。

一般的,應該優(yōu)先使用 os/exec 包。因為 os/exec 包依賴 os 包中關鍵創(chuàng)建進程的 API,為了便于理解,我們先探討 os 包中和進程相關的部分。

Unix :fork創(chuàng)建一個進程,(及其一些變種,如 vfork、clone)。

Go:Linux 下創(chuàng)建進程使用的系統(tǒng)調(diào)用是 clone。

允許一進程(父進程)創(chuàng)建一新進程(子進程)。具體做法是,新的子進程幾近于對父進程的翻版:子進程獲得父進程的棧、數(shù)據(jù)段、堆和執(zhí)行文本段的拷貝。可將此視為把父進程一分為二。

終止一進程,將進程占用的所有資源(內(nèi)存、文件描述符等)歸還內(nèi)核,交其進行再次分配。參數(shù) status 為一整型變量,表示進程的退出狀態(tài)。父進程可使用系統(tǒng)調(diào)用 wait() 來獲取該狀態(tài)。

目的有二:其一,如果子進程尚未調(diào)用 exit() 終止,那么 wait 會掛起父進程直至子進程終止;其二,子進程的終止狀態(tài)通過 wait 的 status 參數(shù)返回。

加載一個新程序(路徑名為 pathname,參數(shù)列表為 argv,環(huán)境變量列表為 envp)到當前進程的內(nèi)存。這將丟棄現(xiàn)存的程序文本段,并為新程序重新創(chuàng)建棧、數(shù)據(jù)段以及堆。通常將這一動作稱為執(zhí)行一個新程序。

沒有直接提供 fork 系統(tǒng)調(diào)用的封裝,而是將 fork 和 execve 合二為一,提供了 syscall.ForkExec。如果想只調(diào)用 fork,得自己通過 syscall.Syscall(syscall.SYS_FORK, 0, 0, 0) 實現(xiàn)。

os.Process 存儲了通過 StartProcess 創(chuàng)建的進程的相關信息。

一般通過 StartProcess 創(chuàng)建 Process 的實例,函數(shù)聲明如下:

它使用提供的程序名、命令行參數(shù)、屬性開始一個新進程。StartProcess 是一個低級別的接口。os/exec 包提供了高級別的接口,一般應該盡量使用 os/exec 包。如果出錯,錯誤的類型會是 *PathError。

屬性定義如下:

FindProcess 可以通過 pid 查找一個運行中的進程。該函數(shù)返回的 Process 對象可以用于獲取關于底層操作系統(tǒng)進程的信息。在 Unix 系統(tǒng)中,此函數(shù)總是成功,即使 pid 對應的進程不存在。

Process 提供了四個方法:Kill、Signal、Wait 和 Release。其中 Kill 和 Signal 跟信號相關,而 Kill 實際上就是調(diào)用 Signal,發(fā)送了 SIGKILL 信號,強制進程退出,關于信號,后續(xù)章節(jié)會專門講解。

Release 方法用于釋放 Process 對象相關的資源,以便將來可以被再使用。該方法只有在確定沒有調(diào)用 Wait 時才需要調(diào)用。Unix 中,該方法的內(nèi)部實現(xiàn)只是將 Process 的 pid 置為 -1。

通過 os 包可以做到運行外部命令,如前面的例子。不過,Go 標準庫為我們封裝了更好用的包: os/exec,運行外部命令,應該優(yōu)先使用它,它包裝了 os.StartProcess 函數(shù)以便更容易的重定向標準輸入和輸出,使用管道連接 I/O,以及作其它的一些調(diào)整。

exec.LookPath 函數(shù)在 PATH 指定目錄中搜索可執(zhí)行程序,如 file 中有 /,則只在當前目錄搜索。該函數(shù)返回完整路徑或相對于當前路徑的一個相對路徑。

func LookPath(file string) (string, error)

如果在 PATH 中沒有找到可執(zhí)行文件,則返回 exec.ErrNotFound。

Cmd 結構代表一個正在準備或者在執(zhí)行中的外部命令,調(diào)用了 Run、Output 或 CombinedOutput 后,Cmd 實例不能被重用。

一般的,應該通過 exec.Command 函數(shù)產(chǎn)生 Cmd 實例:

用法

得到 * Cmd 實例后,接下來一般有兩種寫法:

前面講到,通過 Cmd 實例后,有兩種方式運行命令。有時候,我們不只是簡單的運行命令,還希望能控制命令的輸入和輸出。通過上面的 API 介紹,控制輸入輸出有幾種方法:

參考資料:

如何在腳本中獲取進程ID

1、方法:

在某些情況下,你也許想要知道運行中的子shell的PID。這個PID信息可以在不同的情況下使用。比如,你可以使用shell腳本的PID在/tmp下創(chuàng)建一個唯一的臨時文件。有時侯腳本需要檢測所有運行的進程,它可以從進程列表中排除自身的子shell。

在bash中,子shell進程的PID存儲在一個特殊的變量‘$$’中。這個變量只讀,你不可以在腳本中修改它。比如:

#!/bin/bash

echo "PID of this script: $$"

上面的腳本會得到下面的輸出:

PID of this script: 6583

除了$$, bash shell還會導出其他的只讀變量。比如,PPID存儲子shell父進程的ID(也就是主shell)。UID存儲了執(zhí)行這個腳本的當前用戶ID。比如:

#!/bin/bash

echo "PID of this script: $$"

echo "PPID of this script: $PPID"

echo "UID of this script: $UID"

輸出是:

PID of this script: 6686

PPID of this script: 4656

UID of this script: 1000

上面輸出中,PID每次執(zhí)行都會變化。這個因為每次運行都會創(chuàng)建一個新的shell。另一方面,PPID每次都會一樣只要你在同一個shell中運行。

對于所有bash內(nèi)置變量列表,參考man頁。

$ man bash

2、網(wǎng)絡搜索“如何在腳本中獲取進程ID(PID) - CSDN博客”可找到原貼。

如何查看某個進程的PID值?

ctrl+alt+delete打開任務管理器—》查看-》選擇列-》把PID勾上,這樣就可以顯示進程的PID號了,可以通過PID找到相應的進程。PID是進程運行時系統(tǒng)隨機為進程分配的,并不代表專門的進程。

如何獲取打開文件的進程的pid

用ShellExecuteExW API傳SHELLEXECUTEINFOW結構體的值來啟動應用程序GetProcessId(ShExecInfo.hProcess);

就能獲取啟動應用程序的PID了。

分享標題:go語言獲取進程pid,go創(chuàng)建進程
網(wǎng)頁路徑:http://chinadenli.net/article37/dsehppj.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設計公司品牌網(wǎng)站設計網(wǎng)站維護小程序開發(fā)網(wǎng)站內(nèi)鏈電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名