5月 30
- [root@localhost 2]# ./a
- pid: 4144 fork: 0
- pid: 4143 fork: 4144
- [root@localhost 2]# cat a.c
下载: a.c
- #include <stdlib.h>
- #include <stdio.h>
- main() {
- int pid;
- switch ( pid = fork() ){
- case -1:
- printf("fork: error");
- break;
- case 0: /* child */
- printf ("pid: %d fork: %d\n", getpid(), pid);
- break;
- default: /* parent */
- printf("pid: %d fork: %d\n", getpid(), pid );
- break;
- }
- exit(0);
- }
网上有些文章简单的说成fork调用一次,返回两次.
我的理解是fork调用以后,会创建一个新的子进程,将父进程(4143)的环境(fork调用之前的所有变量)复制(是复制!!!)到子进程(4144)中.这样,运行到fork函数的时候,我们就得到了2个进程(4144和4143)
然后由fork函数返回该进程(也就是父进程4143)创建的子进程pid(4144)
如果没有就返回0(比如4144)
如果异常,返回-1
由于是2个进程,每个进程的fork都会返回1次,总体看上去就像返回了2次一样.根据返回值的不同,可以让2个进程执行不同的代码.
以下是TCPechod.c中fork应用的节选
- switch (fork()) {
- case 0: /* child */
- (void) close(msock);
- exit(TCPechod(ssock));
- default: /* parent */
- (void) close(ssock);
- break;
- case -1:
- errexit("fork: %s\n", strerror(errno));
- }