一个关于系统父进程与子进程的理解案例

代码实例

#include<stdio.h>
#include<unistd.h>
/*程序输出结果
主进程id:8377
进程id:8377,父进程id:3290,插曲
进程id:8377,父进程id:3290,Bye
进程id:8378,父进程id:8377,hello
进程id:8378,父进程id:8377,Bye
进程id:8379,父进程id:1397,插曲
进程id:8379,父进程id:1397,Bye
进程id:8380,父进程id:1397,hello
进程id:8380,父进程id:1397,Bye

*/

int main()
{
	printf("主进程id:%d\n",getpid());
	if(fork()==0||fork()==0&&fork()==0) {
		printf("进程id:%d,父进程id:%d,hello\n",getpid(),getppid());
	} else {
		printf("进程id:%d,父进程id:%d,插曲\n",getpid(),getppid());
	}
	printf("进程id:%d,父进程id:%d,Bye\n",getpid(),getppid());
	return 0;
}

关于这个程序,首先要理解一下fork()函数的一次调用两次返回的特性,即fork()在父进程中返回-1而在子进程中返回0。因此,对于这个程序,main()主进程首先新建一个子进程,第一个fork()在父进程中的返回值不是0,因此父进程直接执行输出插曲,最后执行Bye。而第一个fork的子进程8378则会输出hello,最后输出Bye。接着,由于逻辑关系,第二个fork()则不用执行,直接执行第三个fork()创建了进程8379。


值得体会一下。回头post分析。

你可能感兴趣的:(操作系统,进程)