почему бы не вернуть значение вилки 0?
Я знаю, что дочерний процесс завершился успешно, тогда возвращаемое значение вилки равно 0, но я попытался, если возвращаемое значение (pid) == 0
тогда 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 () равно 0!(я тестировал в другом основном коде о fork ()) ex) roved google code (foo.c)
, но не обнаруженный pid равен 0 в fork ().где возвращаемое значение fork () 0 при создании дочернего процесса?