Linux 程序名 程序號PID互查

2021-07-11 03:04:06 字數 2109 閱讀 6982

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 ...