fork()首次调用新创建进程时,其入口在哪里?在线等等

jvs 2010-10-31 02:02:44
用fork()函数首次调用创建进程时,他的入口在哪里
...全文
5619 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jvs 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 linwhwylb 的回复:]
fork()用户空间
进入内核空间
sys_fork()
do_fork()
copy_process()
[/Quote]
谢谢
Linux-Torvalds 2010-11-07
  • 打赏
  • 举报
回复
fork()用户空间
进入内核空间
sys_fork()
do_fork()
copy_process()
jvs 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lconline 的回复:]
看一下典型的应用代码吧:如下

C/C++ code

pid_t new_pid;
new_pid = fork();
//父进程在这里继续运行,子进程也从这里开始
switch(new_pid){
case -1 : /* error */
break;
case 0 : /* this is child */
……
[/Quote]
谢谢
jvs 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 applic 的回复:]
调用fork函数的下一条语句开始
[/Quote]
谢谢
qifeifei 2010-11-02
  • 打赏
  • 举报
回复
顶,等待高手。
wyjkk 2010-11-02
  • 打赏
  • 举报
回复
fork只是负责创建进程,没有你所谓的入口点函数。如果再fork后面调用了exce函数,那么该进程真正的入口点就是exce函数执行的程序的main函数。

总之,fork负责创建进程,初始化内核数据结构,拷贝附近程各种资源等,exce负责运行进程,也就是加载main入口点。
lconline 2010-11-02
  • 打赏
  • 举报
回复
看一下典型的应用代码吧:如下

pid_t new_pid;
new_pid = fork();
//父进程在这里继续运行,子进程也从这里开始
switch(new_pid){
case -1 : /* error */
break;
case 0 : /* this is child */
/* 子进程会运行这里的代码 */
break;
default: /* this is parent */
break;
}

//如果这后面还有代码,父进程和子进程均会运行


fork()函数被调用一次,但返回两次;两次返回的区别是:子进程的返回值是0,而父进程的返回值是子进程的ID。

子进程和父进程运行相同的代码,但是有自己的数据空间。

ctian_06 2010-11-02
  • 打赏
  • 举报
回复
看看内核你就明白了
jvs 2010-11-02
  • 打赏
  • 举报
回复
谢谢大家,可是我还是搞不太懂
rabbii 2010-11-02
  • 打赏
  • 举报
回复
不知道你说这入口啥意思,在网上找个例子,自己体会下就知道了。
xunmengren2009 2010-11-02
  • 打赏
  • 举报
回复
fork()在父子进程的返回值不一样,返回0的分支是子进程,

fork是把父进程的执行环境复制一分,到自己的进程空间,
即父子进程的执行体是一样的,子进程也是从父进程fork的地方开始执行。


justkk 2010-11-01
  • 打赏
  • 举报
回复
对于fork()产生的子进程而言,其返回值为0
也就是返回值为0的分支是子进程..
Applic 2010-10-31
  • 打赏
  • 举报
回复
调用fork函数的下一条语句开始

4,452

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧