獲取Linux進程的執行文件路徑

 我發現的獲取linux進程的執行文件路徑的方法有如下2個:

1、在c++代碼裏面通過函數gecpwd獲取進程當前執行文件路徑,通過日誌或控制檯來顯示當前進程的運行路徑。這估計是大家看到這個標題就想到的方法。

2、直接通過shell來查看,這也是我在實際情況中碰到的情況:

就是我們開發的系統,控制了在同一個路徑下只能夠運行一次,在實際部署環境過程中會在不同的路徑下提供不同的tcp端口號給不同的應用來測試聯調,這樣,在以./cmd的形式運行多個程序後,會出現通過ps查看進程時,看到n多的./cmd的同名進程在運行。一旦那個應用出現問題或者時間久了後,需要查找對應目錄時,不能夠迅速定位那個進程是運行在那個具體的位置以及爲誰服務。具體做法就是:

1、以超級用戶登陸

2、進入/proc目錄

3、ps查看所有符合./cmd的進程,找出其對應的進程號

4、用ll命令: ll 進程號

如下顯示一個示例:

[root@Cluster1 proc]# ll 22401

total 0
-r--r--r-- 1 zhouys zhouys 0 Dec 11 11:10 cmdline
-r--r--r-- 1 zhouys zhouys 0 Dec 11 11:10 cpu
lrwxrwxrwx 1 zhouys zhouys 0 Dec 11 11:10 cwd -> /home/zhouys/sbs/bin
-r-------- 1 zhouys zhouys 0 Dec 11 11:10 environ
lrwxrwxrwx 1 zhouys zhouys 0 Dec 11 11:10 exe -> /home/zhouys/sbs/bin/cbs (deleted)
dr-x------ 2 zhouys zhouys 0 Dec 11 11:10 fd
-r-------- 1 zhouys zhouys 0 Dec 11 11:10 maps
-rw------- 1 zhouys zhouys 0 Dec 11 11:10 mem
-r--r--r-- 1 zhouys zhouys 0 Dec 11 11:10 mounts
lrwxrwxrwx 1 zhouys zhouys 0 Dec 11 11:10 root -> /
-r--r--r-- 1 zhouys zhouys 0 Dec 11 11:10 stat
-r--r--r-- 1 zhouys zhouys 0 Dec 11 11:10 statm
-r--r--r-- 1 zhouys zhouys 0 Dec 11 11:10 status

/proc文件系統下的 進程號目錄 下面的文件鏡像了進程的當前運行信息,從中可以看到:

cwd符號鏈接的就是進程22401的運行目錄;
exe符號連接就是執行程序的絕對路徑;
cmdline就是程序運行時輸入的命令行命令;本例爲:./cbs
cpu記錄了進程可能運行在其上的cpu;顯示虛擬的cpu信息
environ記錄了進程運行時的環境變量
fd目錄下是進程打開或使用的文件的符號連接
...

通過cwd直接進入進程運行目錄,通過查看相關信息就可以定位此目錄對應那個端口號,以及定位是那個應用才使用此服務程序。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章