使用posix函数显示所有进程

时间:2010-09-08 12:01:25

标签: c ubuntu posix

我正在尝试在Ubuntu中显示当前正在运行的进程。

现在我正在使用system()函数在终端中打印运行进程。代码:

system("ps -A");

此功能显示终端中的所有正在运行的进程。

但我希望使用POSIX功能来实现此功能。我不是在寻找现成的代码。

有人可以指出函数名称或任何手册吗?

4 个答案:

答案 0 :(得分:5)

ps是一个POSIX命令。

popen是一个POSIX API,用于读取命令的输出。

如果你想要一个纯POSIX方法(也许你希望它可以移植到一些不提供/proc的操作系统),你应该使用仅限POSIX的选项运行ps并从{{获取输出1}}。

因此,例如,您可能想要调用popen然后读取PID列表。

答案 1 :(得分:1)

据我所知,Linux上的ps内部循环遍历/proc下的目录(对应于进程ID)。所以我认为没有单一的功能可以做到这一点,你必须自己遍历/proc的子目录(使用更通用的POSIX函数,如readdir等。)。

答案 2 :(得分:1)

查看popen

答案 3 :(得分:1)

  

但我希望使用POSIX功能来实现此功能。我不是在寻找现成的代码。

没有POSIX函数来列出正在运行的进程。这是特定于操作系统的,不是可移植的,应用程序很少需要,因此不属于POSIX。

但是因为你需要在Linux上使用它,所以POSIXy解决方案最多的方法是使用函数opendir() / readdir() / closedir()迭代/proc特殊文件的内容系统。

目录中的所有数字条目都是正在运行的进程的PID。检查内容man 5 proc以获取有关正在运行的进程的信息。然后,您可以使用open() / read() / close()readlink()调用从/proc/NNN/*文件中检索有关特定流程的信息。

在Linux上,pstop等标准工具使用/proc来收集有关进程的信息。它是关于运行进程信息的官方Linux界面。