linux c怎么获取进程信息 当前目录

linux c怎么获取进程信息 当前目录,第1张

// 获取当前进程名(进程目录在函数内已获取到)

bool GetLocalProgramName(char* processname)

{

    char processdir[1024] = {0}

    char* path_end 

    size_t len = 1024

    

    bool ret = false

    

    do

    {

        if(readlink("/proc/self/exe", processdir,len) <=0) 

        {

            fprintf(stderr, "[ERROR]can not get process name\n")

            break 

        }

        

        path_end = strrchr(processdir,  '/')   // 进程目录

        if(path_end == NULL) 

        {

            fprintf(stderr, "[ERROR]can not parse process name\n")

            break 

        }

        ++path_end 

        *path_end = '\0'

        strcpy(processname, path_end) 

        

        ret = true

    }while(0)

    

    return ret

}

这是我以前的代码,稍微改造一下就行。

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目录中有很多跟进程相关的东西,都可以用这种方法触类旁通地实现。

用命令的方式也是很方便将结果存到变量里呀,用一个复制或者重定向就行了。

c代码:

#include <pthread.h>

#include <stdio.h>

void* print_xs (void* unused)

{

while (1)

fputc (‘x’, stderr)

return NULL

}

/* The main program. */

int main ()

{

int i=0

while(1){

pthread_t thread_id

if( NULL != pthread_create (&thread_id, NULL, &print_xs, NULL)){

break

}

i++

}

printf("创建线程个数:%d\n",i)

return 0

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存