计算Minix中的进程数

时间:2015-09-04 21:44:37

标签: process c minix

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

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

问题是,编译时我遇到很多错误。我看到有许多未定义的变量,我不知道应该包含哪些库。代码似乎太浅而无法理解。

1 个答案:

答案 0 :(得分:1)

谷歌搜索'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()

      

    定义为:

    中的函数
       minix/lib/libsys/getsysinfo.c, line 8 
    
         

    定义为函数原型:

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

    其中一个代码片段也显示了一个调用:

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

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

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