【问题标题】:Adding print parent process ID system call to Minix向 Minix 添加打印父进程 ID 系统调用
【发布时间】:2015-12-02 15:45:34
【问题描述】:

这是使用 Minix 在 C 中打印进程 ID 和父进程 ID 的程序。我正在尝试编译此代码下方的测试代码以返回 ID,但它没有编译。任何帮助将不胜感激。

//Program to print its Process ID, Parent Process ID 

  #include <stdio.h>
  #include "pm.h"  // for various global variables 
  #include "mproc.h"  // for process table mproc

int do_printppids(void)
{

int idx = m_in.m1_i1;
int n = m_in.m1_i2;
while(n > 0 )
{
    int pid = mproc[idx].mp_pid;
    if(pid)
    {
        int parent = mproc[mproc[idx].mp_parent].mp_pid;
        printf("proc: %sn", mproc[idx].mp_name);
        printf("Pid: %d, PPid %dn", pid, parent);
        n++;
    }
    else
    {
        n = 0;
    }
    idx++;
}
return 1;
}

这是我尝试返回进程 ID 和父进程 ID 的测试类,但它没有在 Minix 中编译。

#include <lib.h>    // provides _syscall and message
#include <stdio.h>
#include <stdlib.h> // provides atoi

int main(void) {


message m;      // Minix uses message to pass parameters to a system call

m_in.m1_i1 = 0;
m_in.m1_i2 = 10;    

_syscall(PM_PROC_NR, PRINTPPIDS, &m);

}

【问题讨论】:

  • 你得到什么错误信息?
  • test.c:13:26: 错误:使用未声明的标识符 'PRINTPPIDS' _syscall(PM_PROC_NR, PRINTPPIDS, &m);
  • 您必须在 main() 函数中可以看到的某个地方定义 PRINTPPIDS
  • PRINTPPIDScallnr.h 文件中定义,调用号为 70
  • 为什么要付出这么多额外的努力?只需使用:pid_t parentPid = getppid(); 当然代码需要#include &lt;sys/types.h&gt;#include &lt;unistd.h&gt;

标签: c system system-calls minix


【解决方案1】:

确保在运行 Make Service + Install 之前更新并保存所有文件,然后重新编译测试类。因为它花了 4 个小时毫无意义地盯着我的代码 sigh

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多