在 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
}
我正在尝试将退出状态代码添加到 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
}