Linux開發已知程序名字獲取PID號(C語言)

2021-06-29 13:46:52 字數 1234 閱讀 5067

最近需要實現乙個功能,即在乙個linux c程式中,已知其他程序的名字,需要獲得該程序的pid,經過一番上網搜尋,找到兩種可行的方法:

1.通過popen建立乙個管道,執行shell命令並得到返回結果

2.通過搜尋/proc資料夾下的檔案內容,得到程序pid(順帶演示一下linux c中如何讀取乙個資料夾中的內容)

為了方便進行測試,首先隨便寫了一段**如下:

#include

void main()

將**編譯為二進位制檔案test,並使用./test執行,由於該**中由於有scanf函式存在,會一直阻塞,下面就可以執行其它程式來查詢這個程序的pid了。

一、通過popen的方法

我們知道,在shell下可以通過下述命令來得到程序test的pid:

ps -e | grep 'test' | awk ''

(注:這個命令中,名字中含有test字樣的程序都會被掃瞄到,如果只針對名字恰好為test的程序,則需要修改這個命令)

那麼在linux c程式中,只要將這個命令移到shell環境中執行一下,並讀取其執行結果即可。在linux c程式中執行shell命令可以通過popen函式,該函式會返回乙個檔案指標,可以像操作檔案一樣對這個返回的指標進行操作。關於popen函式的細節,網上一搜一大把,這裡就不說了,直接上**:

#include

#include

void main()

\'", "r");//開啟管道,執行shell 命令

char buffer[10] = ;

while (null != fgets(buffer, 10, fp)) //逐行讀取執行結果並列印

pclose(fp); //關閉返回的檔案指標,注意不是用fclose噢}

二、通過搜尋/proc資料夾下的內容獲取程序pid

在系統的/proc資料夾下,儲存有系統當前所有程序的資訊,比如乙個程序的pid為10000,那麼/proc下會有乙個名字為10000的資料夾,其中包含有該程序的幾乎所有資訊:其中/proc/10000/cmdline檔案中儲存了啟動該程序時使用的命令列。

由於剛才的程序是通過./test執行的,因此只要遍歷/proc下的資料夾,如果發現某個資料夾中的cmdline檔案內容為./test,則該資料夾的名字即為程序的pid,**如下:

#include

#include

#include

void main()

} closedir(dir);//關閉路徑 }}

Linux C已知程序名字得到其PID號

最近需要實現乙個功能,即在乙個linux c程式中,已知其他程序的名字,需要獲得該程序的pid,經過一番上網搜尋,找到兩種可行的方法 1.通過popen建立乙個管道,執行shell命令並得到返回結果 2.通過搜尋 proc資料夾下的檔案內容,得到程序pid 順帶演示一下linux c中如何讀取乙個資...

Linux檢視程序和已知埠是否啟動

如檢視activemq的61616這個埠是否啟動,以及直接檢視activemq程序是否啟動,可以通過如下命令進行檢視 其中netstat命令過濾埠,如果能查出就證明已啟動,如果查出沒有結果則表示沒有啟動 可以上面兩步結合起來,來確定哪個程序使用了哪個埠,因為pid查出的是相同的,通過pid就可以進行...

Linux 獲取程序管理

實驗環境 vmware workstation pro下linux red hat 核心版本 2.6.32 1.通過vim編寫程式 首先程式需要包含所需要的標頭檔案。sys types.h資料結構pid t在此構造 sys wait.h函式wait在內定義 sys time.h和sys resour...