打印

linux下创建子进程的调用是fork()

[复制链接]
1787|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxlsunday|  楼主 | 2014-4-14 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
linux下创建子进程的调用是fork()

1.        #include <unistd.h>   
2.        #include <sys/types.h>   
3.        #include <stdio.h>   
4.         
5.         
6.         
7.        void print_exit()  
8.        {  
9.               printf("the exit pid:%d/n",getpid() );  
10.        }  
11.         
12.        main ()   
13.        {   
14.           pid_t pid;   
15.           atexit( print_exit );      //注册该进程退出时的回调函数   
16.              pid=fork();   
17.                if (pid < 0)   
18.                        printf("error in fork!");   
19.                else if (pid == 0)   
20.                        printf("i am the child process, my process id is %d/n",getpid());   
21.                else   
22.                {  
23.                       printf("i am the parent process, my process id is %d/n",getpid());   
24.                      sleep(2);  
25.                      wait();  
26.               }  
27.         
28.        }  

我知道fork()有两个返回值,我有一下不明白的fork()以后,根据返回值执行else if(pid == 0)()里面的程序,执行完了,程序不是完了,退出了这个函数。什么时候执行父进程里面的程序

相关帖子

沙发
nickyamw| | 2014-4-14 11:22 | 只看该作者
我也不懂,为什么fork()创建子进程之后,会有可能返回父进程的pid

使用特权

评论回复
板凳
dufanbao| | 2014-4-14 14:18 | 只看该作者
不能按照过程来理解这段程序,fork以后,会复制一个和父进程一样的运行环境给子进程,所以会有两个进程。

使用特权

评论回复
地板
nickyamw| | 2014-4-14 14:22 | 只看该作者
dufanbao 发表于 2014-4-14 14:18
不能按照过程来理解这段程序,fork以后,会复制一个和父进程一样的运行环境给子进程,所以会有两个进程。 ...

但fork只能返回一个值,怎么确定返回的是父进程的pid,还是子进程的pid?

使用特权

评论回复
5
dufanbao| | 2014-4-14 15:22 | 只看该作者
nickyamw 发表于 2014-4-14 14:22
但fork只能返回一个值,怎么确定返回的是父进程的pid,还是子进程的pid?

返回值是0,就是子进程。返回值大于0,就是父进程(这个值是fork出的子进程pid)。

使用特权

评论回复
6
nickyamw| | 2014-4-14 15:55 | 只看该作者
dufanbao 发表于 2014-4-14 15:22
返回值是0,就是子进程。返回值大于0,就是父进程(这个值是fork出的子进程pid)。 ...

执行fork之后复制了父进程,但fork执行完之后相关的寄存器不是恢复了么,怎么能继续执行子进程

使用特权

评论回复
7
dufanbao| | 2014-4-14 16:43 | 只看该作者
nickyamw 发表于 2014-4-14 15:55
执行fork之后复制了父进程,但fork执行完之后相关的寄存器不是恢复了么,怎么能继续执行子进程 ...

执行完fork,就创建了一个进程,此进程由操作系统负责管理,参与调度,你说的寄存器指的是什么,是硬件的寄存器么,fork是linux的环境编程,是基于操作系统的,不要纠结硬件寄存器。

使用特权

评论回复
8
nickyamw| | 2014-4-14 17:05 | 只看该作者
dufanbao 发表于 2014-4-14 16:43
执行完fork,就创建了一个进程,此进程由操作系统负责管理,参与调度,你说的寄存器指的是什么,是硬件的 ...

这样子啊。

使用特权

评论回复
9
dirtwillfly| | 2014-4-14 21:43 | 只看该作者

使用特权

评论回复
10
lvyunhua| | 2014-4-15 10:35 | 只看该作者
支持下!

使用特权

评论回复
11
outstanding| | 2014-4-15 22:04 | 只看该作者
看看。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

87

帖子

2

粉丝