fork 的子进程 return 值在哪里?
where is fork's child process return value?
为什么不 fork 的 return 值 0?
我知道子进程制作成功,那么fork return值为0
但我尝试了 if return value(pid) == 0
then printf
代码。不幸的是没有打印。
fork(void)
{
int i, pid;
struct proc *np;
struct proc *curproc = myproc();
// Allocate process.
if((np = allocproc()) == 0){
return -1;
}
// Copy process state from proc.
if((np->pgdir = copyuvm(curproc->pgdir, curproc->sz)) == 0){
kfree(np->kstack);
np->kstack = 0;
np->state = UNUSED;
return -1;
}
np->sz = curproc->sz;
np->parent = curproc;
*np->tf = *curproc->tf;
// Clear %eax so that fork returns 0 in the child.
np->tf->eax = 0;
for(i = 0; i < NOFILE; i++)
if(curproc->ofile[i])
np->ofile[i] = filedup(curproc->ofile[i]);
np->cwd = idup(curproc->cwd);
safestrcpy(np->name, curproc->name, sizeof(curproc->name));
pid = np->pid;
acquire(&ptable.lock);
np->state = RUNNABLE;
release(&ptable.lock);
if(pid ==0)
cprintf("child process made%d",pid); // why not print zero ..
else
cprintf("pid value is %d",pid);
return pid;
}
子进程制作成功,即fork()的return值为0! (我在其他关于 fork() 的主要代码中测试过)例如)roved google code(foo.c)
但在 fork() 中未检测到 pid 为 0。
构造子进程时fork()的return值0在哪里?
系统调用由调用它们的进程上下文执行。这意味着调用它们的进程将收到系统调用函数 return 值。 fork 实现与所有其他系统调用具有相同的行为,但有点特殊,因为 2 个进程 supposly return 来自它,尽管实际上只有父进程调用它。
正在构建子进程的堆栈以模拟先前进行的系统调用,以及存储在 trapframe 的 eax 寄存器中的模拟 return 值(用于保存函数 return 值).
当调度程序选择子进程 运行 时,第一行代码 运行 将成为 forkret 函数和 trapret,因为模拟堆栈是由 allocproc 函数准备的。
为什么不 fork 的 return 值 0?
我知道子进程制作成功,那么fork return值为0
但我尝试了 if return value(pid) == 0
then printf
代码。不幸的是没有打印。
fork(void)
{
int i, pid;
struct proc *np;
struct proc *curproc = myproc();
// Allocate process.
if((np = allocproc()) == 0){
return -1;
}
// Copy process state from proc.
if((np->pgdir = copyuvm(curproc->pgdir, curproc->sz)) == 0){
kfree(np->kstack);
np->kstack = 0;
np->state = UNUSED;
return -1;
}
np->sz = curproc->sz;
np->parent = curproc;
*np->tf = *curproc->tf;
// Clear %eax so that fork returns 0 in the child.
np->tf->eax = 0;
for(i = 0; i < NOFILE; i++)
if(curproc->ofile[i])
np->ofile[i] = filedup(curproc->ofile[i]);
np->cwd = idup(curproc->cwd);
safestrcpy(np->name, curproc->name, sizeof(curproc->name));
pid = np->pid;
acquire(&ptable.lock);
np->state = RUNNABLE;
release(&ptable.lock);
if(pid ==0)
cprintf("child process made%d",pid); // why not print zero ..
else
cprintf("pid value is %d",pid);
return pid;
}
子进程制作成功,即fork()的return值为0! (我在其他关于 fork() 的主要代码中测试过)例如)roved google code(foo.c)
但在 fork() 中未检测到 pid 为 0。 构造子进程时fork()的return值0在哪里?
系统调用由调用它们的进程上下文执行。这意味着调用它们的进程将收到系统调用函数 return 值。 fork 实现与所有其他系统调用具有相同的行为,但有点特殊,因为 2 个进程 supposly return 来自它,尽管实际上只有父进程调用它。
正在构建子进程的堆栈以模拟先前进行的系统调用,以及存储在 trapframe 的 eax 寄存器中的模拟 return 值(用于保存函数 return 值).
当调度程序选择子进程 运行 时,第一行代码 运行 将成为 forkret 函数和 trapret,因为模拟堆栈是由 allocproc 函数准备的。