当用户态调用fork系统函数时,会调用sys_fork,在sys_fork函数内会调用
return do_fork(SIGCHLD, regs.esp, ®s, 0, NULL, NULL);
其中SIGCHLD表示当创建的子进程退出时,会发送SIGCHLD信号到父进程,如果父进程有调用wait函数就会回收分配给子进程的资源。
do_fork要做以下的内容:
1. 调用函数alloc_pidmap分配pid号,从最后last这个全局变量+1作为这次的pid号。
2. 判断current->ptrace,这里的语句是if (unlikely(current->ptrace))是否正陷入系统调用,这个标识会被改写。
3. copy_process创建了新任务,新的进程控制块,和thread_info这两个结构体并且进行初始化,但是却不会真正的开始运行这个新进程。返回任务控制块。
4. 如果任务控制块合法,则进入if (!IS_ERR(p))分支。但是里面的task_struct结构内的ptrace是什么含义不懂?
4.1 wake_up_new_task,把要调度的新进程放到队列中,准备被调用。
在上面的内容中不懂的有:
task_struct结构内的ptrace是什么概念?
阅读(2380) | 评论(0) | 转发(0) |