c - C 代码在 Minix 系统上运行的进程数

标签 c unix process minix

因此,一开始这似乎很简单,但在 Google 和此处进行抓取之后,答案似乎并不像我最初想的那么简单。

基本上,我正在编辑一个 MINIX 内核,作为我的操作系统类(class)实践的一部分,我必须添加一个小功能,当您在信息服务器中按下一个功能键时,它会显示正在运行的进程的数量。我已经想出了如何集成这些功能,以便所有其他东西都能正常工作,但是对于我来说,我无法弄清楚如何将系统中运行的当前进程数放入我的 C 代码和一个变量中打印出来。

首先,我认为会有一个像 SYS_NUMPROCS 之类的漂亮的系统调用或返回值的东西,但没有运气。 然后,我尝试将系统(“ps -ax | wc -l”)的输出通过管道传输到一个文件,但该文件不会创建。我尝试使用 popen() 也没有运气——即使将简单的“ls”读入缓冲区,它也只是轰炸代码并“挂起”代码的运行,所以没有输出。

所以现在我真的很困惑,任何帮助都会非常棒,因为此时我已经用尽了所有明显的选择。

我现在唯一能想到的两件事是循环计算所有进程,但首先你必须进入系统的进程列表,我听说过关于/proc/作为目录的模糊说法,但是我不知道如何访问/运行它,或者它如何链接到首先获得进程数。

谢谢大家(笑双关语),伙计们:)

此外,我还没有明确包含代码,因为除了用于修饰输出的基本 printf'ing 之外,我没有写任何东西,因为我尝试过的所有事情都没有给我带来任何快乐:/

编辑注意事项: 伙计们,这是一个内核编辑 - 我正在编写函数来打印系统 C 文件中的信息,然后重新编译内核并重新启动系统以进行测试。它是 UNIX (MINIX) 内核,不是 Linux 内核,也不是用户模式程序。

我的 popen() 代码,正如你们中的一些人所要求的,如下:

public void cos_dmp(){
    char buffer[512];
    FILE * f;

    f = popen("ps -ax | wc -l","r");

    fgets(buffer, sizeof(buffer),f);

  //buffer should now contain result of popen()

     printf(buffer);
}

这是我内存中的一些拼凑版本,它非常简单,并向你们展示了我正在尝试做的事情。不过,除了本质上调用 system() 调用的输出之外,必须有更好的方法来执行此操作。

再次编辑:以上代码在用户程序中运行良好,但在内核函数中无法运行。有人知道为什么吗?:/

最佳答案

struct kinfo kinfo;
int nr_tasks, nr_procs;
getsysinfo(PM_PROC_NR, SI_KINFO, &kinfo);
nr_procs = kinfo.nr_pro;

这将为您提供正在运行的进程数

关于c - C 代码在 Minix 系统上运行的进程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234369/

相关文章:

c - 应用程序未收到 iptable 修改的 Netlink 通知

c - 在 C 中使用位字段时的字段顺序

c - 使用 sed 检测和连接多行结构

c - 如何在全局变量中保存进程 ID?

c# - 以编程方式执行 'ksetup.exe' 命令行命令

java - 从 Runtime.getRuntime().exec() 启动 wkhtmltopdf : never terminates?

彩色 readline 提示符会中断 control-a

c - 指向无符号整数的无符号字符

linux - glibc 文档和字节顺序

c - 用条件向特定的 pthread 发出信号