我需要创建一个用户程序,该程序能够在系统调用的帮助下查看有多少进程正在运行。我发现 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/