fork()太奇葩了

《UNIX环境高级编程》说: “fork()调用一次,返回两次”。 这什么玩意儿? 作为Java程序员觉得很难理解。虽然书上提到了进程复制,但当时还是转不过弯来。这本书的例子代码里会判断fork()返回值的不同而分别执行父子进程的行为,搞得我更晕了,难道linux父子进程实际上是同一个进程?

后来看了一下《操作系统设计与实现》,才终于明白。 下面用代码解释一下。


/*
  
  fork()复制出的子进程跟当前进程所基于的代码一模一样,所以子进程也会执行下面的代码。不过,它不是从第一句开始执行的。
*/

int main(){
	/*下面这句只会执行一次,即只被父进程执行*/
	printf("开始执行。当前进程的ID=%d\n", getpid());

	int pid = fork();

	/*这句会打印两次,说明子进程从这里开始执行*/
	printf("调用fork()之后。当前进程的ID=%d\n", getpid());

	/*下面两次打印出来的pid并不相同*/
	if(pid > 0){
		printf("fork()返回%d.当前进程是父进程,进程ID=%d\n", pid, getpid()); 
	}
	if(pid == 0){
		printf("fork()返回%d.当前进程是子进程,进程ID=%d\n", pid, getpid()); 
	}


        /*下面这句会打印两次,父子进程都会执行*/	
	printf("程序准备退出。当前进程的ID=%d\n================\n", getpid());

}

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.