【问题标题】:Display all process using a posix function使用 posix 函数显示所有进程
【发布时间】:2010-09-08 12:01:24
【问题描述】:

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

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

system("ps -A");

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

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

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

【问题讨论】:

  • 'system' 本身就是在 stdlib.h 中声明的 POSIX 函数调用。尝试运行 strace -ps 以了解 ps 的作用。它主要解析来自 /proc/ 的数据
  • +1 哦,我从来不知道。无论如何,我正在尝试不同的东西。我不想直接从“ps -A”输出。
  • 哦,看起来很吓人:),但我一定会试一试的。

标签: c ubuntu posix


【解决方案1】:

ps 是一个 POSIX 命令。

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

如果您想要一个纯 POSIX 方法(也许您希望它可移植到某些不提供 /proc 的操作系统),您应该运行带有 POSIX-only 选项的 ps 并从 popen 获取输出。

因此,例如,您可能想调用popen("ps -A -o pid=", "r");,然后通读 PID 列表。

【讨论】:

    【解决方案2】:

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

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

    但是由于你在 Linux 上需要这个,最 POSIXy 的解决方案是使用函数 opendir()/readdir()/closedir() 来迭代 /proc 特殊文件系统的内容。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如何在我的程序中包含 proc?
      • /proc 应该是您文件系统上的一个目录。您可以使用函数 readdir 获取其内容列表(通过在 shell 上执行 man readdir 来查看 readdir 手册页)。
      【解决方案4】:

      看看popen

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2011-03-29
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多