linux获取进程id和进程名称

linux获取进程id和进程名称,第1张

linux获取进程id和进程名称作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率,使用方法等信息。才能针对主要应用做出更好的改进。

www.dnjsb.com

那么就需要记录调用者的进程id或者进程名称,并且保存下来。保存的动作可以采用共享内存,也可以采用文件,这个在下篇博文描述,本文描述如何获取进程id和进程名称。范例:#include

<stdio.h>#include

<unistd.h>#define

CFGMNG_TASK_NAME_LEN

256int

main(){

int

ret

char

ac_tmp[CFGMNG_TASK_NAME_LEN]

ret

=

cfgmng_get_taskname(ac_tmp,

CFGMNG_TASK_NAME_LEN)

if

(0

!=

ret)

{

printf(Call

cfgmng_get_taskname

fail./n)

return

-1

}

printf(The

running

task

name

is

%s./n,

ac_tmp)

return

0}int

cfgmng_get_taskname(char

*ac,

int

len){

int

count

=

0

int

nIndex

=

0

char

chPath[CFGMNG_TASK_NAME_LEN]

=

{0}

char

cParam[100]

=

{0}

char

*cTem

=

chPath

int

tmp_len

pid_t

pId

=

getpid()

sprintf(cParam,/proc/%d/exe,pId)/*

printf(cParam

=

%s./n,

cParam)*/

count

=

readlink(cParam,

chPath,

CFGMNG_TASK_NAME_LEN)/*

printf(count

=

%d./n,

count)*/

if

(count

<

0

||

count

>=

CFGMNG_TASK_NAME_LEN)

{

printf(Current

System

Not

Surport

Proc./n)

return

-1

}

else

{

nIndex

=

count

-

1

for(

nIndex

>=

0

nIndex--)

{

if(

chPath[nIndex]

==

'/'

)//筛选出进程名

{

nIndex++

cTem

+=

nIndex

break

}

}

}

tmp_len

=

strlen(cTem)

if

(0

==

tmp_len)

{

printf(Get

task

fail./n)

return

-1

}

if

(len

<=

tmp_len

+1)

{

printf(len(%d)

is

less

than

taskname(%s)'s

len./n,

len,

cTem)

return

-1

}

strcpy(ac,

cTem)

return

0}从上面的实验范例可以看出,主要使用的函数是getpid获取本进程的id,再到/proc/pid/exe

中去找到对应的进程名称。在/proc目录中有很多跟进程相关的东西,都可以用这种方法触类旁通地实现。

用top -u 命令查看进程以及PID。

命令如下:

$ top -u

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU — 上次更新到现在的CPU时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的CPU时间总计,单位1/100秒

COMMAND — 进程名称(命令名/命令行)

linux 下查看进程可以使用的命令:

1、ps命令查找与进程相关的PID号:

2、ps a 显示现行终端机下的所有程序,包括其他用户的程序。

3、ps -A 显示所有程序。

4、ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

5、ps -e 此参数的效果和指定"A"参数相同。

6、ps e 列出程序时,显示每个程序所使用的环境变量。

7、ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

8、ps -H 显示树状结构,表示程序间的相互关系。

9、ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

10、ps s 采用程序信号的格式显示程序状况。

11、ps S 列出程序时,包括已中断的子程序资料。

12、ps -t<终端机编号>指定终端机编号,并列出属于该终端机的程序的状况。

13、ps u 以用户为主的格式来显示程序状况。

14、ps x 显示所有程序,不以终端机来区分。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7680813.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存