如何用C遍历unixlinux下的所有进程,取得PID,名称等等

如何用C遍历unixlinux下的所有进程,取得PID,名称等等,第1张

用管道:

通过fgets(buf,

n,

ptr)buf就可以得到命令“ps

-ef"一样的信息,

读帮助”man

popen":

char

*cmd

=

"ps

-ef"

FILE

*ptr

if

((ptr

=

popen(cmd,

"r"))

!=

NULL)

while

(fgets(buf,

n,

ptr)

!=

NULL)

(void)

printf("%s

",buf)

UID

PID

PPID

C

STIME

TTY

TIME

CMD

root

0

0

0

Sep-30

?

00:00:01

sched

root

1

0

0

Sep-30

?

00:00:06

/etc/init

-a

root

2

0

0

Sep-30

?

00:00:00

vhand

root

3

0

0

Sep-30

?

00:00:27

bdflush

root

4

0

0

Sep-30

?

00:00:00

kmdaemon

root

5

1

0

Sep-30

?

00:00:50

htepi_daemon

/

root

6

0

0

Sep-30

?

00:00:00

strd

root

2941

1

0

Oct-08

tty01

00:00:00

/bin/login

ccb

root

43

1

0

Oct-08

?

00:00:02

/etc/syslogd

root

47

1

0

Oct-08

?

00:00:00

/etc/ifor_pmd

root

48

47

0

Oct-08

?

00:00:13

/etc/ifor_pmd

root

36

1

0

Oct-08

?

00:00:00

我还以为是程序呢,argv[0]不就行了。如果是动态库的话,就比较麻烦了,先上网down一个busybox的源代码吧,参考一下里面top的实现方式,基本思路就是遍历内核的整个进程链表,根据自己的pid(可以用getpid获得)找到对应的进程名。

UNIX环境高级编程,或者LINUX程序设计里头都有这个例子。

从《LINUX程序设计第二版》当中找了个print2.c的代码给你

/* We start with the appropriate headers and then a function, printdir,

which prints out the current directory.

It will recurse for subdirectories, using the depth parameter is used for indentation. */

#include <unistd.h>

#include <stdio.h>

#include <dirent.h>

#include <string.h>

#include <sys/stat.h>

void printdir(char *dir, int depth)

{

DIR *dp

struct dirent *entry

struct stat statbuf

if((dp = opendir(dir)) == NULL) {

fprintf(stderr,"cannot open directory: %s\n", dir)

return

}

chdir(dir)

while((entry = readdir(dp)) != NULL) {

lstat(entry->d_name,&statbuf)

if(S_ISDIR(statbuf.st_mode)) {

/* Found a directory, but ignore . and .. */

if(strcmp(".",entry->d_name) == 0 ||

strcmp("..",entry->d_name) == 0)

continue

printf("%*s%s/\n",depth,"",entry->d_name)

/* Recurse at a new indent level */

printdir(entry->d_name,depth+4)

}

else printf("%*s%s\n",depth,"",entry->d_name)

}

chdir("..")

closedir(dp)

}

/* Now we move onto the main function. */

int main(int argc, char* argv[])

{

char *topdir, pwd[2]="."

if (argc != 2)

topdir=pwd

else

topdir=argv[1]

printf("Directory scan of %s\n",topdir)

printdir(topdir,0)

printf("done.\n")

exit(0)

}


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

原文地址: http://outofmemory.cn/yw/8614256.html

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

发表评论

登录后才能评论

评论列表(0条)

保存