linux下创建子进程的调用是fork()
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)()里面的程序,执行完了,程序不是完了,退出了这个函数。什么时候执行父进程里面的程序 我也不懂,为什么fork()创建子进程之后,会有可能返回父进程的pid 不能按照过程来理解这段程序,fork以后,会复制一个和父进程一样的运行环境给子进程,所以会有两个进程。 dufanbao 发表于 2014-4-14 14:18 static/image/common/back.gif
不能按照过程来理解这段程序,fork以后,会复制一个和父进程一样的运行环境给子进程,所以会有两个进程。 ...
但fork只能返回一个值,怎么确定返回的是父进程的pid,还是子进程的pid? nickyamw 发表于 2014-4-14 14:22 static/image/common/back.gif
但fork只能返回一个值,怎么确定返回的是父进程的pid,还是子进程的pid?
返回值是0,就是子进程。返回值大于0,就是父进程(这个值是fork出的子进程pid)。 dufanbao 发表于 2014-4-14 15:22 static/image/common/back.gif
返回值是0,就是子进程。返回值大于0,就是父进程(这个值是fork出的子进程pid)。 ...
执行fork之后复制了父进程,但fork执行完之后相关的寄存器不是恢复了么,怎么能继续执行子进程 nickyamw 发表于 2014-4-14 15:55 static/image/common/back.gif
执行fork之后复制了父进程,但fork执行完之后相关的寄存器不是恢复了么,怎么能继续执行子进程 ...
执行完fork,就创建了一个进程,此进程由操作系统负责管理,参与调度,你说的寄存器指的是什么,是硬件的寄存器么,fork是linux的环境编程,是基于操作系统的,不要纠结硬件寄存器。 dufanbao 发表于 2014-4-14 16:43 static/image/common/back.gif
执行完fork,就创建了一个进程,此进程由操作系统负责管理,参与调度,你说的寄存器指的是什么,是硬件的 ...
这样子啊。 可以看看这个:http://baike.baidu.com/link?url=C92et2VKf7wlLsJ_PTf1wyJnutLDzlMqtRzUBb1no0GkxjreNTCOM-w0FURYkgFGagovbpJ9D7GPCMQMLZJwP_ 支持下! 看看。。。
页:
[1]