2015-09-04 31 views
0

我需要创建一个用户程序,通过系统调用可以看到有多少进程正在运行。我发现getsysinfo()函数可以给我结果,但是当我尝试编译我的代码时,我得到错误。
我用下面的代码:计算Minix中的进程数

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

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

+0

另请参见[使用C代码在Minix系统上运行的进程数](http://stackoverflow.com/questions/7234369/number-of-running-processes-on-a-minix-system-from-c -码)。请注意,用户正在修改Minix内核,而不是编写普通程序。 –

回答

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库中。

+0

是否有可以从用户程序中使用的getsysinfo()的包装函数? – Bozic

+1

我的印象是“尚未”,但也许你即将解决这个问题。 –