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

toalexjin 2002-11-15 11:25:26
小弟要开发一些关于unix的程序,不知道如何用C遍历unix/linux下的所有进程,相当于shell里面的ps -ef,取得PID,名称等等,其实可以在C里面用打开管道的方式读取“ps -ef”,但不想这么做。

不清楚相关的系统函数是什么,非常感谢!

...全文
1703 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
toalexjin 2002-11-26
  • 打赏
  • 举报
回复
To dawndu(dawndu)

谢谢! 不过你的方法好象对付自己的进程可以的,而对于别人的进程,在open(...)会出错的,根本打不开.

我用的是compaq tru64 unix.
yanyanyan 2002-11-22
  • 打赏
  • 举报
回复
同意dawndu(dawndu)
dawndu 2002-11-22
  • 打赏
  • 举报
回复
在unix/linux中的/proc下有所有进程的信息。

#include<stdio.h>
#include<dirent.h>
#include<procfs.h>

DIR *pd;
int fd;
struct dirent *pdir;
struct prpsinfo procinfo;
char filename[255];

pd=opendir("/proc");
while((pdir=readdir(pd)!=NULL))
{
if(pdir->d_ino==0) continue;
strcpy(filename,"/proc/");
strcat(filename,pdir->d_name);
if((fd=open(filename,...)!=-1)
{
ioctl(fd,参数,procinfo);//参数到 procfs.h 中找

}
}
大概如此,抱歉,记得不是很清楚,每个系统也不尽相同
踏岸寻柳 2002-11-20
  • 打赏
  • 举报
回复
其实UNIX下有很多底层的东西都没有直接的实现方式的。

当然,可能是我还没有找到。

比如:进程、文件系统、硬件相关的
liuto 2002-11-17
  • 打赏
  • 举报
回复
这里:看最后一节

http://www.erlenstar.demon.co.uk/unix/faq_toc.html
liuto 2002-11-17
  • 打赏
  • 举报
回复
看一篇叫做《UNIX FAQ》的经典文章,里面有针对各种unix地解决方法
toalexjin 2002-11-16
  • 打赏
  • 举报
回复
To wgh166(面朝PC屏幕,背靠西子湖)

这种方法我知道的,但我想完全用C来实现,不想和shell搭上边,应该有比较直接的C的系统函数的,只是不知道.
blh 2002-11-15
  • 打赏
  • 举报
回复
linux下遍历/proc下所有以数字为名字的目录
牧牛人软件 2002-11-15
  • 打赏
  • 举报
回复
用管道:

通过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

toalexjin 2002-11-15
  • 打赏
  • 举报
回复
是有很多,而且和ps -ef的PID一样,那我想取得某个PID的相关信息,比如说名称,它实际的命令的名字,什么时候运行的一些信息,怎么办? C里面的相关函数是什么?

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧