【问题标题】:Counting number of processes in Minix计算 Minix 中的进程数
【发布时间】:2015-09-04 21:44:37
【问题描述】:

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

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

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

【问题讨论】:

标签: process c minix


【解决方案1】:

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()

    定义为函数:

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

【讨论】:

  • 用户程序是否有getsysinfo()的封装函数?
  • 我的印象是“还没有”,但也许你即将解决这个问题。
猜你喜欢
  • 2013-09-16
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
相关资源
最近更新 更多