process - 计算 Minix 中的进程数

标签 process c minix

我需要创建一个用户程序,该程序能够在系统调用的帮助下查看有多少进程正在运行。我发现 getsysinfo() 函数可以给我结果,但当我尝试编译代码时出现错误。
我使用了以下代码:

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

问题是,我在编译时遇到很多错误。我看到有很多 undefined variable ,我不知道应该包含哪些库。代码看起来太浅薄,难以理解。

最佳答案

Google 搜索“minix getsysinfo”显示了各种来源,包括:

  • How does function getsysinfo work in Minix

    除其他外,这表明该函数只能在内核内部访问,而不能在用户代码中访问。它还包含一个与您所显示的非常相似的代码片段以及注释:

    endpoint_t who // from whom to request info
    int what // what information is requested
    void *where // where to put it
    size_t size // how big it should be
    

    示例:

    struct kinfo pinf;
    int num_procs;
    getsysinfo(PM_PROC_NR, SI_KINFO, &pinf);
    num_procs = pinf.nr_pro;
    

    至少有点奇怪的是,描述说“4 个参数”,而示例仅使用“3 个参数”(并且您的代码也是如此)。

  • Minix identifier search: getsysinfo()

    Defined as a function in:

       minix/lib/libsys/getsysinfo.c, line 8 
    

    Defined as a function prototype in:

       minix/include/minix/sysinfo.h, line 8 
    

    还引用的代码片段之一显示了一个调用:

      if (getsysinfo(RS_PROC_NR, SI_PROCPUB_TAB, rprocpub, sizeof(rprocpub)) != OK …
    

    这显示了所描述的第四个参数,但在问题和第一个链接中引用的示例中省略了。

这些和其他引用看起来都像内核代码而不是用户代码。因此,从表面上看,如果您正在为 Minix 编写用户端程序,则无法访问此函数,因为它位于内核中,而不是用户可调用的 C 库中。

关于process - 计算 Minix 中的进程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414572/

相关文章:

vim - 如何将vim安装到Minix3中?

c - 在 Linux 上的 C 中,我将如何使用 2 个程序,后者使用 stdout 将文本数据发送到第一个显示的程序?

c - MINIX 内部碎片 2

java - 如何知道进程何时完成?

c++ - 通过 "\0"而不是 memset() 批量初始化 char 数组

c - 按值传递指针或按引用传递指针是否相同

c - 在 Mac OS X 中打开文件

c - 为什么 super 用户可以比非特权用户同时运行更多的进程?

java - 获取在 Windows 上的 Eclipse 中运行的 Tomcat 的进程 ID

windows - 在 Windows 中启动后立即自动终止进程