Use parent pointer instead of ppid.
This commit is contained in:
parent
3a057d12ae
commit
b1fb19b6df
2 changed files with 8 additions and 10 deletions
16
proc.c
16
proc.c
|
@ -118,7 +118,7 @@ copyproc(struct proc *p)
|
|||
np->tf = (struct trapframe*)(np->kstack + KSTACKSIZE) - 1;
|
||||
|
||||
if(p){ // Copy process state from p.
|
||||
np->ppid = p->pid;
|
||||
np->parent = p;
|
||||
memmove(np->tf, p->tf, sizeof(*np->tf));
|
||||
|
||||
np->sz = p->sz;
|
||||
|
@ -366,15 +366,13 @@ proc_exit(void)
|
|||
|
||||
acquire(&proc_table_lock);
|
||||
|
||||
// Wake up waiting parent.
|
||||
for(p = proc; p < &proc[NPROC]; p++)
|
||||
if(p->pid == cp->ppid)
|
||||
wakeup1(p);
|
||||
// Parent might be sleeping in proc_wait.
|
||||
wakeup1(cp->parent);
|
||||
|
||||
// Pass abandoned children to init.
|
||||
for(p = proc; p < &proc[NPROC]; p++){
|
||||
if(p->ppid == cp->pid){
|
||||
p->ppid = initproc->pid;
|
||||
if(p->parent == cp){
|
||||
p->parent = initproc;
|
||||
if(p->state == ZOMBIE)
|
||||
wakeup1(initproc);
|
||||
}
|
||||
|
@ -403,7 +401,7 @@ proc_wait(void)
|
|||
p = &proc[i];
|
||||
if(p->state == UNUSED)
|
||||
continue;
|
||||
if(p->ppid == cp->pid){
|
||||
if(p->parent == cp){
|
||||
if(p->state == ZOMBIE){
|
||||
// Found one.
|
||||
kfree(p->mem, p->sz);
|
||||
|
@ -411,7 +409,7 @@ proc_wait(void)
|
|||
pid = p->pid;
|
||||
p->state = UNUSED;
|
||||
p->pid = 0;
|
||||
p->ppid = 0;
|
||||
p->parent = 0;
|
||||
p->name[0] = 0;
|
||||
release(&proc_table_lock);
|
||||
return pid;
|
||||
|
|
2
proc.h
2
proc.h
|
@ -33,7 +33,7 @@ struct proc {
|
|||
char *kstack; // Bottom of kernel stack for this process
|
||||
enum proc_state state; // Process state
|
||||
int pid; // Process ID
|
||||
int ppid; // Parent pid
|
||||
struct proc *parent; // Parent process
|
||||
void *chan; // If non-zero, sleeping on chan
|
||||
int killed; // If non-zero, have been killed
|
||||
struct file *ofile[NOFILE]; // Open files
|
||||
|
|
Loading…
Reference in a new issue