初学fork函数

上个星期看《UNIX Network Programming》的时候,第一次学用fork()函数。

fork()函数在UNIX中定义在<unistd.h>头文件中,功能是创建一个子进程。fork()函数很强大,书上说初学者最难以理解的地方是所谓的“调用一次,返回两次”。确实,一开始还没敲代码之前,我看着Example,看来看去都不明白怎样“调用一次,返回两次”,例子大概如下面的伪代码

/* before fork */
if ((pid = fork()) == 0) {
    /* the child process */
    exit(0);    /* child exit */
}
/* parent process */

书上说返回两次的意思是,对于父进程,返回值是子进程的进程号,而对于子进程则返回0。第一次看这句话的时候,还不足以让我看明白上面的代码中,子进程为什么写在if语句里。

后来敲过代码之后,大概明白了。原来fork()函数调用之后,就会产生和原来进程一模一样的副本。在父进程的副本中,因为返回值不等于0,所以不执行if语句里的东西。但是对于新建的子进程的副本,返回值是0,所以执行了if语句里的东西。

也就是说,创建一个新的进程后,两个进程互相独立执行。不过这里仍然有一个问题让我觉得困惑,在这种风格中,要编写多个进程的代码,就要把子进程嵌入到代码中,一旦子进程是复杂的,似乎要理清代码并不容易,这个问题还要在以后看书中继续留意。

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s