
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 显示所有程序,不以终端机来区分。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)