最近需要實現乙個功能,即在乙個linux c程式中,已知其他程序的名字,需要獲得該程序的pid,經過一番上網搜尋,找到兩種可行的方法:
1.通過popen建立乙個管道,執行shell命令並得到返回結果
2.通過搜尋/proc資料夾下的檔案內容,得到程序pid(順帶演示一下linux c中如何讀取乙個資料夾中的內容)
為了方便進行測試,首先隨便寫了一段**如下:
#includevoid 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#includevoid 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#includevoid main()
}closedir(dir);//關閉路徑
}}
Linux開發已知程序名字獲取PID號(C語言)
最近需要實現乙個功能,即在乙個linux c程式中,已知其他程序的名字,需要獲得該程序的pid,經過一番上網搜尋,找到兩種可行的方法 1.通過popen建立乙個管道,執行shell命令並得到返回結果 2.通過搜尋 proc資料夾下的檔案內容,得到程序pid 順帶演示一下linux c中如何讀取乙個資...
已知時間日期得到星期
演算法如下 基姆拉爾森計算公式 w d 2 m 3 m 1 5 y y 4 y 100 y 400 mod 7 在公式中d表示日期中的日數,m表示月份數,y表示年數。注意 在公式中有個與其他公式不同的地方 如下 y 年,m 月,d 日期 function caculateweekday y asin...
Linux C程序 執行緒
1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...