code:fork - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- fork 的系统调用函数
- 用于生成子进程
- 返回值
- 父进程 返回 子进程进程号
- 子进程 返回 0(子进程返回值 设置 参看系统调用:fork)
3320
3321 /* fork system call. */
3322 fork()
3323 {
3324 register struct proc *p1, *p2;
3325
3326 p1 = u.u_procp;
3327 for(p2 = &proc[0]; p2 < &proc[NPROC]; p2++)
3328 if(p2->p_stat == NULL)
3329 goto found;
3330 u.u_error = EAGAIN;
3331 goto out;
但是 newproc 中对于没有找到空闲项的情况 处理过于暴力(抛出错误,等待用户干预) 故在这里采用温和的方式处理错误(同时 也形成了 代码冗余)3332
3333 found:
3334 if(newproc()) {
3335 u.u_ar0[R0] = p1->p_pid;
3336 u.u_cstime[0] = 0;
3337 u.u_cstime[1] = 0;
3338 u.u_stime = 0;
3339 u.u_cutime[0] = 0;
3340 u.u_cutime[1] = 0;
3341 u.u_utime = 0;
3342 return;
3343 }
3344 u.u_ar0[R0] = p2->p_pid;
3345
- 父进程 返回值 置为 子进程进程号
3346 out:
3347 u.u_ar0[R7] =+ 2;
3348 }
- 此句 的 作用,参看系统调用:fork
3349 /* ------------------------- */
- (fork = 2.)
- sys fork
- (new process return)
- (old process return)