liunx中通過程序名查詢程序pid可以通過 pidof [程序名] 來查詢。反過來 ,相同通過pid查詢程序名則沒有相關命令。
在linux根目錄中,有乙個/proc的vfs(虛擬檔案系統),系統當前執行的所有程序都對應於該目錄下的乙個以程序pid命名的資料夾,其中存放程序執行的n多資訊。其中有乙個status檔案,cat顯示該檔案, 第一行的name即為程序名。
例如:開啟stardict程式,程序名為stardict;
shell中分別根據pid獲取程序名、根據程序名獲取pid
1)查詢stardict的pid:pidof stardict
2)根據1)的pid查詢程序名: grep "name:" /proc/5884/status
應用:kill乙個程序需要指定該程序的pid,所以我們需要先根據程序名找到pid,然後再kill;
killall命令則只需要給定程序名即可,應該是封裝了這個過程。
c程式中實現上述過程
複製**
**如下:
#include
#include
#include
#include
#define buf_size 1024
void getpidbyname(char* task_name)
sscanf(buf, "%*s %s", cur_task_name);
//如果檔案內容滿足要求則列印路徑的名字(即程序的pid)
if (!strcmp(task_name, cur_task_name))
printf("pid: %s\n", ptr->d_name);
fclose(fp);}}
closedir(dir);//關閉路徑}}
void getnamebypid(pid_t pid, char *task_name)
fclose(fp);
sscanf(buf, "%*s %s", task_name);}}
void main(int argc, char** argv)
執行結果:
進入/proc/9674/status檢視檔案內容,一切對應。
複製**
**如下:
name: test
state: s (sleeping)
tgid: 9674
pid: 9674
ppid: 7438
tracerpid: 0
uid: 1000 1000 1000 1000
gid: 1000 1000 1000 1000
fdsize: 256
groups: 4 24 27 30 46 112 124 1000
vmpeak: 4340 kb
vmsize: 4336 kb
vmlck: 0 kb
vmpin: 0 kb
vmhwm: 600 kb
vmrss: 600 kb
vmdata: 184 kb
vmstk: 136 kb
vmexe: 4 kb
vmlib: 1920 kb
vmpte: 32 kb
vmswap: 0 kb
threads: 1
sigq: 0/15776
sigpnd: 0000000000000000
shdpnd: 0000000000000000
sigblk: 0000000000000000
sigign: 0000000000000000
sigcgt: 0000000000000000
capinh: 0000000000000000
capeff: 0000000000000000
capbnd: 0000001fffffffff
seccomp: 0
cpus_allowed: f
cpus_allowed_list: 0-3
mems_allowed: 00000000,00000001
mems_allowed_list: 0
voluntary_ctxt_switches: 1
nonvoluntary_ctxt_switches: 4
Linux開發已知程序名字獲取PID號(C語言)
最近需要實現乙個功能,即在乙個linux c程式中,已知其他程序的名字,需要獲得該程序的pid,經過一番上網搜尋,找到兩種可行的方法 1.通過popen建立乙個管道,執行shell命令並得到返回結果 2.通過搜尋 proc資料夾下的檔案內容,得到程序pid 順帶演示一下linux c中如何讀取乙個資...
macOS環境 檢視埠 程序號 程序名
記錄一些mac下的常用命令 1 檢視程序號 ps ef grep 程序名 2 檢視埠被哪個程序監聽 sudo lsof i 埠 3 檢視程序監聽的埠 sudo lsof np p 程序號 grep listen sudo lsof np grep listen grep 程序號 4 檢視監聽埠的程序...
通過程序名和程序號殺死相應程序
在linux系統中,我們可以通過在 proc目錄下檢視所有的執行的程序。在 proc的目錄下,每個程序對應乙個資料夾,並且程序號與檔名相對應。在程序資料夾內有乙個status檔案,其第一行對應的對應的就是程序名。我們由此可以通過程序名來獲取相應的程序號。include include define ...