在 xv6 中向进程添加退出代码

adding exit code to processes in xv6

我正在尝试将退出状态代码添加到 XV6 中的进程。

我做了以下更改:

1) 至 sysproc.c:

int
sys_exit(int status)
{
  exit(status);
  return 0;  // not reached
}

2) 至 defs.h:

...
void            exit(int);
...

3) 至 proc.h:

struct proc {
  PCB struct elements...
  ...
  int status;                  // added
};

4) 至 proc.c:

void
exit(int status)
{
  struct proc *curproc = myproc();
  struct proc *p;
  int fd;

  cprintf("exit received: %d\n",status); // for debugging purposes

  curproc->status = status; // added

  ...rest of exit system call...
  }

5) 至 user.h:

// system calls

...
int exit(int) __attribute__((noreturn));
...

然后我想通过一个简单的用户-space程序来测试添加的"functionality":

int
main (int argc, char *argv[]) {
    exit(3);
}

但打印了以下内容(注意 proc.c 中用于调试的 cprintf 调用):

$ exittest
exit received: -2146420507

我做错了什么?

谢谢

您不能像在 'normal' 函数中那样读取系统调用参数,您必须使用 argint 函数(参见其他系统调用,例如 sys_kill

所以你更正后的系统调用应该是:

int
sys_exit(void)
{
  int status;
  if(argint(n, &i) < 0) 
      // not arg:pass 0 to exit
      exit(0);
  exit(status);
  return 0;  // not reached
}