【问题标题】:Show the list of running processes in C显示 C 中正在运行的进程列表
【发布时间】:2023-04-08 22:35:01
【问题描述】:

你能建议我一个检索当前正在运行的进程的系统调用吗? (我得写一个像top一样的C函数)

我尝试读取 proc/ 文件夹,但在我的情况下并不好。

【问题讨论】:

  • ps 可能是那个。
  • 您的问题可能很奇怪或模棱两可:system(3) 函数不是系统调用!你可能想使用popen
  • 为什么阅读/proc/ 目录 对您不利?而且top不是函数,而是程序……
  • 还有ps和top USE /proc ...所以无论你在做什么都可以通过检查/proc来完成

标签: c linux unix system-calls


【解决方案1】:

唯一在 Linux 上执行此操作的方法是访问 /proc/ 伪文件系统。请记住,/proc/ 文件不是磁盘上的“真实”文件,因此 I/O(即读取 /proc/ 文件)非常快。

阅读 proc(5) 手册页。

您可以使用libprocps,它正在阅读/proc/

pstop(以及htop 等...)命令都使用/proc/;如果你想在程序内部使用它们(这可能是个坏主意)使用popen(3)(获取它们的输出)而不是system(3)

所以要获得正在运行的进程,您可以在/proc/ 上使用readdir,然后读取/proc/*/stat 文件,记住那些状态为R 等...等...

【讨论】:

  • /proc/ 目录读取不一定是获取系统上正在运行的当前进程的唯一方法(例如如何/proc/ 已填充);我认为 OP 可能会要求内核空间解决方案。
  • 我不明白系统调用可以从内核内部调用。所以我知道 OP 是从用户空间的角度来询问的。
  • 是的,我想你有一个观点,内核模块调用系统调用将是一个奇怪的情况。
【解决方案2】:

ps

ps辅助

地点:

-A: select all processes
a: select all processes on a terminal, including those of other users
x: select processes without controlling ttys

个人比较喜欢用:

ps -ef

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多